欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java png圖片修改像素rgba值的操作

 更新時(shí)間:2021年11月15日 09:48:28   作者:hello_world_j  
這篇文章主要介紹了Java png圖片修改像素rgba值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java png圖片修改像素rgba值

import javax.imageio.ImageIO; 
import javax.swing.ImageIcon;
import java.awt.*; 
import java.awt.image.BufferedImage;
import java.io.File; 
public class  ReadColorTest { 
    public static void setAlpha(String os) {
                try {
                  ImageIcon imageIcon = new ImageIcon(os);
                  BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(),imageIcon.getIconHeight()
                      , BufferedImage.TYPE_4BYTE_ABGR);
                  Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
                  g2D.drawImage(imageIcon.getImage(), 0, 0,imageIcon.getImageObserver());
                  for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
                    for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
                      int pixel = bufferedImage.getRGB(j2, j1);//j2橫坐標(biāo),j1豎坐標(biāo)
                      int[]   rgb = new int[3];
                      rgb[0] = (pixel & 0x00ff0000) >> 16;//按位與獲取red然后右移
                      rgb[1] = (pixel & 0x0000ff00) >> 8;//..獲取green...
                      rgb[2] = (pixel & 0x000000ff);
                      int a=(pixel & 0xff000000)>>>24;//無(wú)符號(hào)右移獲取alpha值
                      if(comp(rgb[0],rgb[1],rgb[2])||a==0) {
                    	  pixel = pixel | 0xffffffff;//透明或偏向白色射為白色
                      }else {
                    	  pixel = (pixel & 0xff000000)| 0xff000000;//否則為黑色
                      }
                      bufferedImage.setRGB(j2, j1, pixel);
                    }
                    System.out.println();
                  }
                  g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());
                  ImageIO.write(bufferedImage, "png",  new File("D:\\2.png"));
                }
                catch (Exception e) {
                  e.printStackTrace();
                }
    }
    public static boolean comp(int r,int g,int b) {//判斷二值化為黑還是白,true為白,false為黑
    	int i = 0;
    	if(r>200) {
    		i++;
    	}
    	if(g>200) {
    		i++;
    	}
    	if(b>200) {
    		i++;
    	}
    	if(i>=2) {
    		return true;
    	}else {
    		return false;
    	}
    }
       
    public static void main(String[] args) throws Exception { 
        setAlpha("H:\\Test\\3.png");  
    } 
}

ARGB與RGB、RGBA的區(qū)別

  • ARGB 是一種色彩模式,也就是RGB色彩模式附加上Alpha(透明度)通道,常見(jiàn)于32位位圖的存儲(chǔ)結(jié)構(gòu)。
  • RGB 色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過(guò)對(duì)紅(R)、綠(G)、藍(lán)(B)三個(gè)顏色通道的變化以及它們相互之間的疊加來(lái)得到各式各樣的顏色的,RGB即是代表紅、綠、藍(lán)三個(gè)通道的顏色,這個(gè)標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是目前運(yùn)用最廣的顏色系統(tǒng)之一。
  • RGBA 是代表Red(紅色) Green(綠色) Blue(藍(lán)色)和 Alpha的色彩空間。雖然它有的時(shí)候被描述為一個(gè)顏色空間,但是它其實(shí)僅僅是RGB模型的附加了額外的信息。采用的顏色是RGB,可以屬于任何一種RGB顏色空間,但是Catmull和Smith在1971至1972年間提出了這個(gè)不可或缺的alpha數(shù)值,使得alpha渲染和alpha合成變得可能。提出者以alpha來(lái)命名是源于經(jīng)典的線性插值方程αA + (1-α)B所用的就是這個(gè)希臘字母。

PNG是一種使用RGBA的圖像格式。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論