首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >操纵BufferedImage的Alpha值

操纵BufferedImage的Alpha值
EN

Stack Overflow用户
提问于 2016-11-01 20:04:41
回答 1查看 517关注 0票数 0

在代码中,我将整个图像的像素的Alpha值设置为100,并在读取图像时将Alpha值设置为100。但是在检索部分,它给了我255(默认值)。出什么问题了?如何解决这个问题?任何帮助都将不胜感激。

类Demo {

代码语言:javascript
复制
Demo()
{     
  try
  {

    BufferedImage im2 = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB);
    File f2 = new File("test2.jpg");
    im2 = ImageIO.read(f2);       
    int width1 = im2.getWidth();
    int height1 = im2.getHeight();

    for(int i=0;i<height1;i++)
    {
        for(int j=0;j<width1;j++)
        {
            Color c = new Color(50,0,0,100);   //Set the alpha value to 100
           im2.setRGB(j,i,c.getRGB());         //  for every pixel
        }
    }
    File f = new File("Demo_copy.jpg");
    ImageIO.write(im2,"jpg",f);

    //  Retrieving.........
    BufferedImage im1;
    File f1 = new File("Demo_copy.jpg");
    im1 = ImageIO.read(f1);
    int width = im1.getWidth();
    int height = im1.getHeight();
    for(int i=0;i<height;i++)
    {
        for(int j=0;j<width;j++)
        {
        int pixel = im1.getRGB(j,i);
        Color c = new Color(pixel,true);
        int a = c.getAlpha();  
        System.out.println("Alpha value is :"+a);  // Printing Alpha : 255 for every pixel
        }
    }
  }catch(Exception e){}
}
public static void main(String [] ar)
{
    new Demo(); 
}

}

EN

回答 1

Stack Overflow用户

发布于 2016-11-01 20:42:11

分配给im2new BufferedImage(...)在您从ImageIO.read(..)分配了一个新值后被丢弃(垃圾回收)。由于新值是JPEG,并且没有alpha,因此设置什么alpha值都无关紧要。它们将始终保持255 (完全不透明)。

相反,您可能希望这样做:

代码语言:javascript
复制
// Read opaque image...
BufferedImage img = ImageIO.read(new File("test2.jpg")); 

// ...convert image to TYPE_INT_ARGB...
BufferedImage im2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB);

Graphics2D g = im2.createGraphics();
try {
    g.drawImage(img, 0, 0, null);
}
finally {
    g.dispose();
}

// ... loop over and change alpha in im2 as before

最后,您应该以支持无损alpha的格式编写图像,如PNG而不是JPEG,以确保获得预期的值:

代码语言:javascript
复制
ImageIO.write(im2,"PNG", new File("Demo_copy.png"));

PS:使用JPEG也可以,因为内置的Java ImageIO JPEG插件支持读/写带有Alpha值的JPEG。然而,大多数其他软件会将这些错误地解释为CMYK JPEG,并且颜色看起来都是错误的。此外,JPEG是有损的,因此您很可能不会像在接收端所期望的那样看到确切的Alpha值(100)。这就是为什么我建议使用PNG。TIFF或其他支持alpha的格式也可以工作,但需要额外的插件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40359720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档