我正在写一个视频游戏,我正在寻找一种快速重新着色图像的方法。图像目前是黑色的,我想用红色重新着色整个图像。
有人能指出我如何使用Java图像处理库LookupTables如何只替换一种颜色吗?我很难找到一个如何做到这一点的例子。 看来你要编写的这些过滤器应该比通过每个像素进行交互更快。这是对的吗?
如果可以提供关于如何使用LookupTable将一种颜色替换为另一种颜色(例如用红色替换黑色)的示例代码,那就太棒了!
感谢。
以下是JavaDocs for Java SE 6中的一些代码。您如何编写createImage?
Image src = getImage("doc:///demo/images/duke/T1.gif");
ImageFilter colorfilter = new RedBlueSwapFilter();
Image img = createImage(new FilteredImageSource(src.getSource(),
colorfilter)); // <--- How do you write this?
这是来自JavaDocs SE 6的代码RedBlueSwapFilter
。我假设我可以用红色和蓝色代替黑色和红色十六进制代码? (即我想用红色代替黑色)
class RedBlueSwapFilter extends RGBImageFilter {
public RedBlueSwapFilter() {
// The filter's operation does not depend on the
// pixel's location, so IndexColorModels can be
// filtered directly.
canFilterIndexColorModel = true;
}
public int filterRGB(int x, int y, int rgb) {
return ((rgb & 0xff00ff00)
| ((rgb & 0xff0000) >> 16)
| ((rgb & 0xff) << 16));
}
}
感谢您的帮助!谢谢!
答案 0 :(得分:0)
如果您需要一个完全红色的图像(并且它之前的颜色并不重要),那么有一种更简单,更快捷的方式:
BufferedImage image = ... // your existing image
Graphics2D g = image.createGraphics();
g.setPaint(Color.RED);
g.fillRect(0, 0, image.getWidth(), image.getHeight());
g.dispose();
如果您只需要用红色像素替换黑色像素,那么您可以像这样使用RGBImageFilter:
public int filterRGB(int x, int y, int rgb) {
if(rgb == 0xff000000) { // if it was pure black
return 0xffff0000; // change it to red
} else {
return rgb; // else return as it was
}
}