zoukankan      html  css  js  c++  java
  • PNG图片的截取问题

    在缩放和截取图片的时候会发现在处理有透明效果的png图片是会出现意想不到的效果,莫名奇妙出来很多黑线。因为在很多的图片格式中是没有透明效果的,所以在解析的时候就会出错。

    alpha通道是指一张图片的透明和半透明,比如一个使用16位元存储的位图,对于图形中的每一个像素而言,可能以一个5个位元表示红色,5个绿色,5个蓝色,最后一个位元是alpha。在这种情况下,它要么表示透明要么不是。如果是用32个位元存储的位图,红绿蓝分别用8位,剩下的8位用来表示不同程度的透明度。

    在处理的时候,如果用下面的代码来实现一般图片的切割:

            Image image = bi.getScaledInstance(srcW, srcH, Image.SCALE_DEFAULT);
    cropFilter = new CropImageFilter(x, y, width, height);
    img = Toolkit.getDefaultToolkit().createImage(
    new FilteredImageSource(image.getSource(), cropFilter));
    BufferedImage tag = new BufferedImage(width, height,
    BufferedImage.TYPE_INT_RGB);
    Graphics2D g = (Graphics2D) tag.getGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(img, 0, 0, null);
    g.dispose();
    ImageIO.write(tag, "jpg", new File(imageFullPath));

    问题就出在RenderingHints.KEY_INTERPOLATION上面,貌似这个是不带alpha通道的处理,改成BufferedImage.TYPE_INT_ARGB_PRE后恢复正常。BufferedImage中的各个值的含义如下(copy自别人博客):

    BufferedImage.TYPE_INT_RGB:8 位 RGB 颜色分量,不带alpha通道。
    BufferedImage.TYPE_INT_ARGB:8 位 RGBA 颜色分量,带alpha通道。
    BufferedImage.TYPE_INT_ARGB_PRE:8 位 RGBA 颜色分量,已预乘以 alpha。
    BufferedImage.TYPE_INT_BGR:8 位 RGB 颜色分量Windows 或 Solaris 风格的图像,不带alpha通道。
    BufferedImage.TYPE_3BYTE_BGR:8位GBA颜色分量,用3字节存储Blue、Green和Red三种颜色,不存在alpha。
    BufferedImage.TYPE_4BYTE_ABGR:8位RGBA颜色分量,用3字节存储Blue、Green和Red三种颜色以及1字节alpha。
    BufferedImage.TYPE_4BYTE_ABGR_PRE:具有用3字节存储的Blue、Green和Red三种颜色以及1字节alpha。
    BufferedImage.TYPE_USHORT_565_RGB:具有5-6-5RGB颜色分量(5位Red、6位Green、5位Blue)的图像,不带alpha。
    BufferedImage.TYPE_USHORT_555_RGB:具有5-5-5RGB颜色分量(5位Red、5位Green、5位Blue)的图像,不带alpha。
    BufferedImage.TYPE_BYTE_GRAY:表示无符号byte灰度级图像(无索引)。
    BufferedImage.TYPE_USHORT_GRAY:表示一个无符号short 灰度级图像(无索引)。
    BufferedImage.TYPE_BYTE_BINARY:表示一个不透明的以字节打包的 1、2 或 4 位图像。
    BufferedImage.TYPE_BYTE_INDEXED:表示带索引的字节图像。
  • 相关阅读:
    (转)CortexM3 (NXP LPC1788)之IIS控制器
    (转)ARMThumb 过程调用标准
    (转)CortexM3 (NXP LPC1788)之看门狗定时器对Flash编程的影响
    (转)CortexM3 (NXP LPC1788)之ADC数模转换器的应用
    (笔记)电路设计(一)之上拉电阻与下拉电阻的应用
    (转)CortexM3 (NXP LPC1788)之EEPROM存储器
    (转)CortexM3 (NXP LPC1788)之IIS应用UDA1380进行音频数据播放
    (转)CortexM3 (NXP LPC1788)之WDT窗口看门狗定时器
    (转)CortexM3 (NXP LPC1788)之SDRAM操作
    (转)CortexM3 (NXP LPC1788)之IIC应用PCA9532进行IO扩展和LED亮度控制
  • 原文地址:https://www.cnblogs.com/ggzwtj/p/2377801.html
Copyright © 2011-2022 走看看