Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Graphics2D一种绘制图像的方法,其中使用像素alpha值,但颜色值被给定颜色替换_Java_Image_Swing_Awt_Graphics2d - Fatal编程技术网

Java Graphics2D一种绘制图像的方法,其中使用像素alpha值,但颜色值被给定颜色替换

Java Graphics2D一种绘制图像的方法,其中使用像素alpha值,但颜色值被给定颜色替换,java,image,swing,awt,graphics2d,Java,Image,Swing,Awt,Graphics2d,我一直在阅读Graphics2D的API,看到了所有可用的合成模式(类似于photoshop混合模式)的示例,但我看不到一种方法可以将源图像绘制到指定颜色的目标缓冲图像,例如,我的源图像是一个完全透明背景上的白色不透明圆,如何使用它绘制缓冲区,以便绘制彩色圆 出于性能原因,我不希望构建中间映像,api是否可以这样做 编辑:我添加了一个图像,希望能帮助显示我试图描述的操作。这是在OpenGL等中绘制精灵的常用方法,我只是想知道如何使用Graphics2DAPI来做同样的事情 在下面的imageNa

我一直在阅读
Graphics2D
的API,看到了所有可用的合成模式(类似于photoshop混合模式)的示例,但我看不到一种方法可以将源图像绘制到指定颜色的目标缓冲图像,例如,我的源图像是一个完全透明背景上的白色不透明圆,如何使用它绘制缓冲区,以便绘制彩色圆

出于性能原因,我不希望构建中间映像,api是否可以这样做

编辑:我添加了一个图像,希望能帮助显示我试图描述的操作。这是在OpenGL等中绘制精灵的常用方法,我只是想知道如何使用
Graphics2D
API来做同样的事情


在下面的imageName中指定图像的位置

公共类ColoredCircle扩展了JPanel{
JFrame=新JFrame();
缓冲图像buf;
字符串imageName=“F://ngc\u 1300\u spiral.jpg”;
公共静态void main(字符串[]args){
新的彩色圆圈().start();
}
int标度=10;
公开作废开始(){
试一试{
buf=ImageIO.read(新文件(imageName));
}
捕获(ioe异常ioe){
ioe.printStackTrace();
}
设置首选大小(
新维度(buf.getWidth()/scale,buf.getHeight()/scale));
框架。添加(此);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
重新油漆();
}
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g.create();
g2d.绘图图像(buf,
0,
0,
buf.getWidth()/scale,
buf.getHeight()/比例,
无效);
g2d.dispose();
}
}
可以使用API,但您必须编写自己的
ImageProducer
子类,类似于
FilteredImageSource
,但具有两个输入图像,而不是一个。但是正因为如此,最终的结果将需要比手动实现更多的代码行,而且效率也不会更高。或者,您可以使用现有的
FilteredImageSource
并编写一个
ImageFilter
子类来包装第二个图像并完成这项艰巨的工作


如果您决定使用上述任何一种方法,请戳我。

谢谢您的回复,但我正在寻找一种专门用于绘制图像而不是形状的解决方案。我更新了我的答案。只需提供图像的位置。您可能需要调整磅秤以使其适合。但是我仍然不确定你想用它做什么。@WJS我建议你使用像:
ImageIO.read(新URL('http://www.digitalphotoartistry.com/rose1.jpg"));
@wjs再次感谢,但我所寻找的与此不同,它甚至可能不可能与API一起实现,但我提供了一个简单的示例图像,我可以想到它来说明我试图描述的内容。我不认为没有中间图像就可以做到这一点。(在JavaFX中,使用节点的属性肯定是可能的。)