Java png圖片修改像素rgba值的操作
更新時間:2021年11月15日 09:48:28 作者:hello_world_j
這篇文章主要介紹了Java png圖片修改像素rgba值的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
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;//無符號右移獲取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(透明度)通道,常見于32位位圖的存儲結(jié)構(gòu)。
- RGB 色彩模式是工業(yè)界的一種顏色標(biāo)準(zhǔn),是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標(biāo)準(zhǔn)幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統(tǒng)之一。
- RGBA 是代表Red(紅色) Green(綠色) Blue(藍色)和 Alpha的色彩空間。雖然它有的時候被描述為一個顏色空間,但是它其實僅僅是RGB模型的附加了額外的信息。采用的顏色是RGB,可以屬于任何一種RGB顏色空間,但是Catmull和Smith在1971至1972年間提出了這個不可或缺的alpha數(shù)值,使得alpha渲染和alpha合成變得可能。提出者以alpha來命名是源于經(jīng)典的線性插值方程αA + (1-α)B所用的就是這個希臘字母。
PNG是一種使用RGBA的圖像格式。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JAVA CountDownLatch(倒計時計數(shù)器)用法實例
這篇文章主要介紹了JAVA CountDownLatch(倒計時計數(shù)器)用法實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解
什么是條件構(gòu)造器呢?簡單來說,條件構(gòu)造器就是用來生成我們查數(shù)據(jù)庫的sql。它可以簡化sql代碼的編寫,靈活、方便且易于維護2021-09-09java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException
Map在遍歷時候通常 現(xiàn)獲得其鍵值的集合Set,然后用迭代器Iterator來對Map進行遍歷。2009-06-06Java Swing組件單選框JRadioButton用法示例
這篇文章主要介紹了Java Swing組件單選框JRadioButton用法,結(jié)合具體實例形式分析了Swing單選框JRadioButton的使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2017-11-11Java番外雜談之每天掃的二維碼你了解它內(nèi)含的信息嗎
二維碼已經(jīng)成為我們?nèi)粘I钪斜夭豢缮俚慕M成部分了,登錄需要掃一掃二維碼、買東西付錢需要掃一掃二維碼、開會簽到也需要掃一掃二維碼,那么如此使用的二維碼技術(shù),背后的原理是怎樣的呢?本文將結(jié)合二維碼的發(fā)展歷程以及典型應(yīng)用場景,分析二維碼背后的技術(shù)原理2022-02-02