在java中更改透明像素的颜色

在java中更改透明像素的颜色,java,image-processing,Java,Image Processing,现在我可以将另一个图像的像素应用于pg到m的源图像像素。但问题是我失去了梯度或衰减效应 public static void main(String[] args){ try { BufferedImage image = ImageIO.read(new File("c:\\m.png")); BufferedImage patt = ImageIO.read(new File("c:\\pg.png"));

现在我可以将另一个图像的像素应用于pg到m的源图像像素。但问题是我失去了梯度或衰减效应

     public static void main(String[] args){
        try {
            BufferedImage image = ImageIO.read(new File("c:\\m.png"));
            BufferedImage patt = ImageIO.read(new File("c:\\pg.png"));

            int f = 0;
            int t = 0;
            int n = 0;
            BufferedImage bff = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_ARGB);
            for (int y = 0; y < image.getHeight(); ++y) {
                for (int x = 0; x < image.getWidth(); ++x) {
                    int argb = image.getRGB(x, y);
                    int nrg = patt.getRGB(x, y);

                    if(((argb>>24) & 0xff) == 0) {
                                bff.setRGB(x, y, (255<<24));
                    } else {
                                bff.setRGB(x, y, nrg);
                    }                               
                }
            }
            System.out.println("Trans : " + t + " Normal : " + n);
            File outputfile = new File("c://imagetest.png");
            ImageIO.write(bff, "png", outputfile);
        } catch (IOException ex) {

        }

}
publicstaticvoidmain(字符串[]args){
试一试{
BuffereImage image=ImageIO.read(新文件(“c:\\m.png”);
BuffereImage patt=ImageIO.read(新文件(“c:\\pg.png”);
int f=0;
int t=0;
int n=0;
BuffereImage bff=新的BuffereImage(image.getWidth(),image.getHeight(),buffereImage.TYPE_INT_ARGB);
对于(int y=0;y>24)&0xff)==0){

bff.setRGB(x,y,(255
0xff000000
是不透明的黑色,
0x00000000
是完全透明的

什么是
0
(您选择的颜色)

是的,它是透明的

试试
0xff000000
或者更好的方法:
argb^0xff000000
,这样只会改变透明度

                if(((argb>>24) & 0xff) == 0) {
                            bff.setRGB(x, y, argb ^ 0xff000000);
                } else {
                            bff.setRGB(x, y, argb);
                }                               

0xff000000
是不透明的黑色,
0x00000000
是完全透明的

什么是
0
(您选择的颜色)

是的,它是透明的

试试
0xff000000
或者更好的方法:
argb^0xff000000
,这样只会改变透明度

                if(((argb>>24) & 0xff) == 0) {
                            bff.setRGB(x, y, argb ^ 0xff000000);
                } else {
                            bff.setRGB(x, y, argb);
                }                               

0xff000000
是不透明的黑色,
0x00000000
是完全透明的

什么是
0
(您选择的颜色)

是的,它是透明的

试试
0xff000000
或者更好的方法:
argb^0xff000000
,这样只会改变透明度

                if(((argb>>24) & 0xff) == 0) {
                            bff.setRGB(x, y, argb ^ 0xff000000);
                } else {
                            bff.setRGB(x, y, argb);
                }                               

0xff000000
是不透明的黑色,
0x00000000
是完全透明的

什么是
0
(您选择的颜色)

是的,它是透明的

试试
0xff000000
或者更好的方法:
argb^0xff000000
,这样只会改变透明度

                if(((argb>>24) & 0xff) == 0) {
                            bff.setRGB(x, y, argb ^ 0xff000000);
                } else {
                            bff.setRGB(x, y, argb);
                }                               

对于
BufferedImage.setRGB(int x,int y,int rgb)
而言,
rgb
值的组成如下:

11111111 11111111 11111111 11111111 Alpha Red Green Blue 测试Alpha值是否为0,因此完全透明

当您发现它为真时,您可以使用以下命令将rgb值设置为0

bff.setRGB(x, y, 0);
因此,您将再次将其设置为透明

换成

bff.setRGB(x, y, (255<<24));
将其更改为不透明的黑色像素。该像素的二进制值为

111111000000000000000000000000000000000000

编辑:应该可以更好地工作,因为它在去除透明度的同时保留了像素的颜色

如果要将其设置为特定颜色,可以执行以下操作:

bff.setRGB(x, y, 0xffff0000); // red
bff.setRGB(x, y, 0xff00ff00); // green
bff.setRGB(x, y, 0xff0000ff); // blue

或红色、绿色和蓝色值的任意组合。

对于
buffereImage.setRGB(int x,int y,int rgb)
rgb
值由以下组成:

11111111 11111111 11111111 11111111 Alpha Red Green Blue 测试Alpha值是否为0,因此完全透明

当您发现它为真时,您可以使用以下命令将rgb值设置为0

bff.setRGB(x, y, 0);
因此,您将再次将其设置为透明

换成

bff.setRGB(x, y, (255<<24));
将其更改为不透明的黑色像素。该像素的二进制值为

111111000000000000000000000000000000000000

编辑:应该可以更好地工作,因为它在去除透明度的同时保留了像素的颜色

如果要将其设置为特定颜色,可以执行以下操作:

bff.setRGB(x, y, 0xffff0000); // red
bff.setRGB(x, y, 0xff00ff00); // green
bff.setRGB(x, y, 0xff0000ff); // blue

或红色、绿色和蓝色值的任意组合。

对于
buffereImage.setRGB(int x,int y,int rgb)
rgb值由以下组成:

11111111 11111111 11111111 11111111 Alpha Red Green Blue 测试Alpha值是否为0,因此完全透明

当您发现它为真时,您可以使用以下命令将rgb值设置为0

bff.setRGB(x, y, 0);
因此,您将再次将其设置为透明

换成

bff.setRGB(x, y, (255<<24));
将其更改为不透明的黑色像素。该像素的二进制值为

111111000000000000000000000000000000000000

编辑:应该可以更好地工作,因为它在去除透明度的同时保留了像素的颜色

如果要将其设置为特定颜色,可以执行以下操作:

bff.setRGB(x, y, 0xffff0000); // red
bff.setRGB(x, y, 0xff00ff00); // green
bff.setRGB(x, y, 0xff0000ff); // blue

或红色、绿色和蓝色值的任意组合。

对于
buffereImage.setRGB(int x,int y,int rgb)
rgb值由以下组成:

11111111 11111111 11111111 11111111 Alpha Red Green Blue 测试Alpha值是否为0,因此完全透明

当您发现它为真时,您可以使用以下命令将rgb值设置为0

bff.setRGB(x, y, 0);
因此,您将再次将其设置为透明

换成

bff.setRGB(x, y, (255<<24));
将其更改为不透明的黑色像素。该像素的二进制值为

111111000000000000000000000000000000000000

编辑:应该可以更好地工作,因为它在去除透明度的同时保留了像素的颜色

如果要将其设置为特定颜色,可以执行以下操作:

bff.setRGB(x, y, 0xffff0000); // red
bff.setRGB(x, y, 0xff00ff00); // green
bff.setRGB(x, y, 0xff0000ff); // blue


或红色、绿色和蓝色值的任意组合。

不更改颜色…更改透明度如何更改透明度不更改颜色…更改透明度如何更改透明度不更改颜色…更改透明度如何更改透明度不更改颜色…更改透明度如何更改透明度不更改颜色…更改透明度如何更改透明度这真的很有帮助。如果我想将另一幅图像的像素添加到此非透明图像中。
bff.setRGB(x,y,argb^0xff000000);
(来自Moritz-Petersen)将实现这一点。您现在将其全部变为白色的原因是原始图像将像素设置为透明白色。我已经编辑了我的问题,现在当我将不同图像的像素应用于源图像时,我失去了淡入和渐变效果。当我使用(nrg+argb)将两者的像素相加,我就在某个地方实现了我所需要的,但只有黑色像素的问题,所有黑色像素现在都是白色。这真的很有用。如果我想将另一个图像的像素添加到此非透明图像中。
bff.setRGB(x,y,argb^0xff00000