所以我有一个带有火山的图像文件。其他所有内容均为0xFFFF00FF(不透明的洋红色)。我想将包含该颜色的每个像素替换为0(透明)。到目前为止,我的方法如下所示:
public static BufferedImage replace(BufferedImage image, int target, int preferred) {
int width = image.getWidth();
int height = image.getHeight();
BufferedImage newImage = new BufferedImage(width, height, image.getType());
int color;
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
color = image.getRGB(i, j);
if (color == target) {
newImage.setRGB(i, j, preferred);
}
else {
newImage.setRGB(i, j, color);
}
}
}
return newImage;
}
这工作正常,但似乎很慢。我见过有人以其他方式执行此操作,但是我不知道发生了什么。如果有人知道更好的方法,我非常想听听。
为了避免遍历像素,请更改基础ColorModel。这是一个例子。以下是作者使用原始BufferedImage并应用新颜色模型的代码段。
private static BufferedImage createImage() {
int width = 200;
int height = 200;
// Generate the source pixels for our image
// Lets just keep it to a simple blank image for now
byte[] pixels = new byte[width * height];
DataBuffer dataBuffer = new DataBufferByte(pixels, width*height, 0);
SampleModel sampleModel = new SinglePixelPackedSampleModel(
DataBuffer.TYPE_BYTE, width, height, new int[] {(byte)0xf});
WritableRaster raster = Raster.createWritableRaster(
sampleModel, dataBuffer, null);
return new BufferedImage(createColorModel(0), raster, false, null);
}
private static ColorModel createColorModel(int n) {
// Create a simple color model with all values mapping to
// a single shade of gray
// nb. this could be improved by reusing the byte arrays
byte[] r = new byte[16];
byte[] g = new byte[16];
byte[] b = new byte[16];
for (int i = 0; i < r.length; i++) {
r[i] = (byte) n;
g[i] = (byte) n;
b[i] = (byte) n;
}
return new IndexColorModel(4, 16, r, g, b);
}
private BufferedImage image = createImage();
image = new BufferedImage(createColorModel(e.getX()), image.getRaster(), false, null);
问题内容: 我想知道是否有一种更有效的方法来替换BufferedImage中的颜色。目前,我使用以下方法: 我用要替换的颜色和要替换的颜色(包括透明度)填充数组。然后,我遍历图像中的每个像素。如果它与阵列中的一种颜色匹配,我将其替换为阵列中的新颜色。这是代码: 我正在处理的图像很小,约为20x20像素。但是,似乎必须有一种更有效的方法来执行此操作。 问题答案: 您可以修改基础ColorModel而
我想更改不透明图像的颜色。我的原图如下: 我想把图像转换成以下格式 所以,基本上我想把图像中的红色转换成黑色(任何其他颜色)。上面两个图像是为了更好地理解而添加的。
问题内容: 我想替换图像的颜色。例如,将所有蓝色变为红色而形状没有任何变形。当我尝试这样做时,我可以通过迭代每个像素来交换颜色,但是交换区域的形状变为平坦的形状。 example1输入:http: //www.tutorialwiz.com/tutorials/changing_color/images/original.jpg example1输出:http : //www.tutorialwi
问题内容: 特别是我的图像在透明的情况下都是纯黑色的。我想在绘制图像时为图像分配简单的颜色,以便将黑色区域更改为新颜色。 我尝试使用仅返回所需颜色的RGBImageFilter,但出现了问题,根本没有绘制任何内容。(ColourFilter扩展了RGBImageFilter,并仅在其filterRGB()方法中返回设置的颜色。) 问题答案: 查看AlphaComposites,尤其是DST_IN:
问题内容: 我正在开发一个捕获屏幕快照并从捕获的图像创建视频的应用程序。但是问题在于,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我正在使用BufferedImage.TYPE_3BYTE_BGR类型操纵捕获的图像以显示光标。有人可以告诉我如何解决此问题,我希望视频的颜色与屏幕的实际颜色相同。 为了捕获屏幕图像,我正在执行以下操作: 对于操作图像,我正在做如下操作: 请告诉我如何获取
问题内容: 我一直在网上搜索此信息,但没有找到任何体面的帮助。 我有一个BufferedImage,已与ImageIO一起阅读。现在,我想使该图像中的某种颜色变为透明,然后将图像另存为PNG。 我知道出于明显的原因我不能仅仅“绘制”透明颜色,所以我猜我需要某种过滤器。 有人为此提供了一些示例代码吗? 问题答案: 我最近这样做是为了回答我的项目经理的问题。 将灰色转换为透明的功能是: 实际上,它作用