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;//無(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)文章
java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼
這篇文章主要介紹了java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-04-04簡(jiǎn)單談?wù)凧ava類與類之間的關(guān)系
類與類之間的關(guān)系對(duì)于理解面向?qū)ο缶哂泻苤匾淖饔?,以前在面試的時(shí)候也經(jīng)常被問(wèn)到這個(gè)問(wèn)題,在這里我就簡(jiǎn)單給大家介紹一下。2016-05-05SpringMvc接受請(qǐng)求參數(shù)的幾種情況演示
Springmvc接受請(qǐng)求參數(shù)的幾種介紹,如何接受json請(qǐng)求參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07JAVA CountDownLatch(倒計(jì)時(shí)計(jì)數(shù)器)用法實(shí)例
這篇文章主要介紹了JAVA CountDownLatch(倒計(jì)時(shí)計(jì)數(shù)器)用法實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解
什么是條件構(gòu)造器呢?簡(jiǎn)單來(lái)說(shuō),條件構(gòu)造器就是用來(lái)生成我們查數(shù)據(jù)庫(kù)的sql。它可以簡(jiǎn)化sql代碼的編寫,靈活、方便且易于維護(hù)2021-09-09java 集合并發(fā)操作出現(xiàn)的異常ConcurrentModificationException
Map在遍歷時(shí)候通常 現(xiàn)獲得其鍵值的集合Set,然后用迭代器Iterator來(lái)對(duì)Map進(jìn)行遍歷。2009-06-06Java Swing組件單選框JRadioButton用法示例
這篇文章主要介紹了Java Swing組件單選框JRadioButton用法,結(jié)合具體實(shí)例形式分析了Swing單選框JRadioButton的使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2017-11-11RocketMQ獲取指定消息的實(shí)現(xiàn)方法(源碼)
這篇文章主要給大家介紹了關(guān)于RocketMQ獲取指定消息的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用RocketMQ具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Java番外雜談之每天掃的二維碼你了解它內(nèi)含的信息嗎
二維碼已經(jīng)成為我們?nèi)粘I钪斜夭豢缮俚慕M成部分了,登錄需要掃一掃二維碼、買東西付錢需要掃一掃二維碼、開(kāi)會(huì)簽到也需要掃一掃二維碼,那么如此使用的二維碼技術(shù),背后的原理是怎樣的呢?本文將結(jié)合二維碼的發(fā)展歷程以及典型應(yīng)用場(chǎng)景,分析二維碼背后的技術(shù)原理2022-02-02