- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上我的问题分为两部分。
我想知道操纵像素并将某种颜色变成透明像素的首选/快速方法。
我想知道我是否能够使用这个“BufferedImage”,而不必将其保存为支持透明度的文件格式,例如“png”。
我找到了一种设置单个像素的方法
这里
BufferedImage layer = ImageIO.read(new File(file));
System.out.println(layer.getWidth());
BufferedImage image = new BufferedImage(layer.getWidth(), layer.getHeight(), BufferedImage.TYPE_INT_ARGB);
WritableRaster raster = image.getRaster();
int width = layer.getWidth();
int height = layer.getHeight();
// Slow method: scan all input (layer) image pixels, plotting only those which are not the transparency color
int lPixel,red,green,blue;
for(int w=0;w<width;w++)
for(int h=0;h<height;h++)
{
lPixel = layer.getRGB(w,h);
if ((lPixel&0x00FFFFFF) != trans) //transparent color
{
red = (int)((lPixel&0x00FF0000)>>>16); // Red level
green = (int)((lPixel&0x0000FF00)>>>8); // Green level
blue = (int) (lPixel&0x000000FF); // Blue level
// Set the pixel on the output image's raster.
raster.setPixel(w,h,new int[]{red,green,blue,255});
}
}
正如它所提到的,这是一种“缓慢的方法”。
<小时/>我找到了这个帖子 Java: Filling a BufferedImage with transparent pixels
哪一条评论讨论了“int[]”以及在那里操纵像素。
<小时/>我注意到我可以在 bufferedImage 中使用“setRGB”设置每个像素,但“WritableRaster...”中会有“setpixel”
为什么要在“BufferedImage”中使用“WritableRaster”的“setpixel”而不是“setRGB”?
我也很好奇如何访问“int[]”以及这是否是解决此问题的首选方法?
有没有一种方法可以搜索某些彩色像素,而不是自己遍历每个像素来找到正确的颜色?
只是好奇首选/最快的方法是什么。
使用 int[] 的方法声称它不会使用“硬件加速”,所以我很好奇这是否也很重要?
<小时/>我假设一旦它被缓冲,我就可以对其做任何事情,但我很好奇其他人怎么想?
<小时/>想法?
非常感谢您的帮助!
最佳答案
关于第二个问题:您只需将文件加载到支持透明度的正确格式的 BufferedImage 中,例如:BufferedImage.TYPE_INT_ARGB
。 ARGB
表示“阿尔法、红、绿、蓝”其中 alpha 代表透明度。您可以随心所欲地操作 BufferedImage,文件格式就是您最终打算如何编写它。
关于你的第一个问题,我不确定你将如何优化它,因为你将必须访问每个像素(无论你使用哪种方法),并更改值。我会选择慢速方法,因为(对我来说)似乎是不可避免的。
编辑: int[] 方法基本上是获取 WritableRaster 中的值并将它们放入数组中。因此,您不必调用 setRGB()
,而只需调用 array[i][j]=someValue
。理论上,这会提高性能,因为您将执行低级别的操作(访问某些数组中的值),而不是像 setRGB()
这样的更高级别的方法调用。但是您仍然需要将该数组转换回来转换为 Raster,然后返回 BufferedImage。说实话,这样做的利润似乎可以忽略不计,因为你不是在制作高性能游戏。我只是在 4K 图像(你通常会遇到的最高分辨率)上尝试了“慢速”方法,程序在 10 秒内完成(知道我在最坏的情况下将所有像素设置为透明)。通常的高清图片将花费大约 4 倍的时间。
关于java - BufferedImage 和具有透明度的像素操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33877874/
我正在制作一个应用程序,我需要使用 ffmpeg 将两个视频文件叠加在另一个之上。 .我尝试了各种命令,但它所做的只是合并视频。 最佳答案 基本方法是 ffmpeg -i in1 -i in2 -fi
我将 Qt3D 与 offscreen renderer 结合使用并修改框架图以包含背景图像,例如 here . 不幸的是,使用 QPhongAlphaMaterial 为绘制在背景图像上的对象添加透
我正在开发的这个组件有视觉问题。它是带有 2 个 JTextField 和 2 个 JLabel 的 JPanel。我不能做坚实的背景。我尝试了几种不透明/背景颜色组合但没有成功。 我不允许附加图像,
我正在使用 Gnuplot 成功绘制一些时间序列数据。然而,该系列相当密集(大约 5 英寸空间中有 10,000 个样本),当我绘制多个系列时,很难看到绘制在顶部的系列下方。 有什么方法可以使线条具有
我正在尝试设置一个自定义拖动图标以在 NSTableView 中使用。一切似乎都正常,但由于我对 Quartz 缺乏经验,我遇到了问题。 - (NSImage *)dragImageForRowsWi
是否可以制作例如 20% 透明的 TMemo 或其他 vcl 组件?像 TButton 或 TEdit 吗? 在谷歌搜索解决方案时,我发现了这个: From Here ,然后我想,如果我在窗体上绘制图
我目前正在学习如何使用 Scenekit,并且遇到了透明对象的问题。我写了一个着色器来增加正面看脸时的透明度,当我选择白色背景时,一切都按预期工作...... transparency with wh
我对 openGL 中的 alpha 混合有疑问... 我尝试了一些绘制透明对象的方法...通过在绘制透明面之前禁用 GL_DEPTH_TEST 并在绘制透明面后再次重新启用 GL_DEPTH_TES
我正试图让我的背景 webView 像那样透明: webView.setBackgroundColor(0x00000000); 但它不起作用,如果我添加这一行,一切都是透明的(我看不到我的 html
我目前正在创建一个应用程序并且出现了这个问题,我想让 TabLayout 透明。当我使用 RelativeLayout TabLayout 覆盖内容时,当我使用 LinearLayout TabLay
我有一个 UINavigationItem(不是 UINavigationBar),我想使其透明或不透明。这是在我建立从导航 Controller 到我的 UIViewController 子类的关系
是否可以让您的 android Activity 以透明模式在当前正在运行的 Activity 之上运行,以便您可以通过它看到它下面的 Activity ?如果可能,您可以设置不同级别的透明度吗? 最
我正在使用 noUiSlider 范围 slider 。这是 jsfiddle: https://jsfiddle.net/oun5p1xz/ behaviourSlider = document.g
有没有办法改变控制台的不透明度使其半透明? 还有办法将控制台的背景颜色更改为自定义颜色吗? 最佳答案 快速谷歌显示 this site其中包含用于具有透明窗口的控制台应用程序的代码。 本质上,您必须获
主.xml: 这是我的 main.xml,我试图使按钮最透明,但我仍然想看到它们,但我不知道要添加什么以及在哪里添加,请用低不透明度更正我的 xml在按钮
如何将实际内容 Pane 的背景设置为不透明,我添加到其中的面板我已经设置为不透明,但即使我这样做,选项卡 Pane 的主要区域仍显示为蓝色 JTabbedPane tabbedPane = new
是否可以继承颜色但覆盖不透明度值?以下是伪 CSS 中的示例: .color-class { background-color: rgba(255, 0, 0, 0); } .lighten
我正在尝试让我的导航栏变得 100% 透明,以便 UINavigationButtonItems 只可见并且背景(通常为白色)应该显示背景图像。 我试过了 HomeNavigationControll
RGBA 非常有趣,-webkit-gradient、-moz-gradient 和呃... progid:DXImageTransform.Microsoft.gradient 也是如此...是的。
我一直在尝试使用 AppBarLayout,但找不到使它的背景透明的方法。 我的意思是: 这是我的 XML: 如您所见,我使用的是颜色 #8000
我是一名优秀的程序员,十分优秀!