Java png图片修改像素rgba值的操作
作者:hello_world_j 发布时间:2022-08-11 06:57:21
标签: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横坐标,j1竖坐标
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的区别
ARGB 是一种色彩模式,也就是RGB色彩模式附加上Alpha(透明度)通道,常见于32位位图的存储结构。
RGB 色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
RGBA 是代表Red(红色) Green(绿色) Blue(蓝色)和 Alpha的色彩空间。虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。采用的颜色是RGB,可以属于任何一种RGB颜色空间,但是Catmull和Smith在1971至1972年间提出了这个不可或缺的alpha数值,使得alpha渲染和alpha合成变得可能。提出者以alpha来命名是源于经典的线性插值方程αA + (1-α)B所用的就是这个希腊字母。
PNG是一种使用RGBA的图像格式。
来源:https://blog.csdn.net/hello_world_j/article/details/80724626


猜你喜欢
- 最近有个需求 要求列表 滑动后第一条 需要和顶部对齐上网找了找 发现 官方支持 Recycle + LinearSna
- 换了工作要把Java重新捡起来了,这个在大学里用过的语言,虽然不复杂,还是有一些奇怪的地方的。比如static import。Static
- 1 什么是cookie浏览器与WEB服务器之间是使用HTTP协议进行通信的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,然后就
- 前言我们程序员在开发的时候经常会遇到各种各样的 BUG 问题,其中大部分是业务逻辑异常,还有一些是代码书写不规范造成的异常例如:NullPo
- Exception e中e的getMessage()和toString()方法的区别:示例代码1:public class TestInfo
- 基于 springboot+vue 的测试平台(练手项目)开发继续更新。接下来准备开发请求断言功能。关于这个功能要实现哪些需求,长什么样子,
- synchronized关键字顾名思义,是用于同步互斥的作用的。这里精简的记一下它的使用方法以及意义:1. 当synchronized修饰
- 前言最近在学习安卓开发的时候遇到了一个问题,使用Android Studio在为Button设置背景颜色的时候发现设置好后却在运行 * 上失
- 1、作用域1.1 作用域的作用作用域——scope通常来说,一段程序代码中所用到的名字并不总是有效/
- 前言在RequestMappingHandlerAdapter对request进行了适配,并且调用了目标handler之后,其会返回一个Mo
- XML作为一种业界公认的数据交换格式,在各个平台与语言之上,都有广泛使用和实现。其标准型,可靠性,安全性......毋庸置疑。在androi
- System_Server进程运行在system server进程中的服务比较多,这是整个android框架的基础Native服务Surfa
- 前言为什么要动态设置字体大小?由于项目面对的是中老年客户项目中自带的字体无法满足客户需求。Android应用字体大小默认随系统设置的字体大小
- sql中like通配符模糊匹配问题针对oracle数据库:将查询条件通过功能类处理/** * Desc
- 本文实例为大家分享了C# Winform实现圆角无锯齿按钮的具体代码,供大家参考,具体内容如下发现用Winform做一个圆角按钮遇到麻烦,主
- 最近利用下班的时候看了看的think in java感觉再看 和第一次看大不一样接下来说一下java中对象和引用的关系,以及内部类的概念。1
- 本文实例形式展示了DevExpress实现GridControl根据列选中一行的方法,比较实用的功能,希望能对大家进行项目开发起到一定的借鉴
- 前言老规矩,还是从最简单粗暴的开始。那么多简单算简单?多粗暴算粗暴?我告诉你可以不写一句代码,你信吗?直接把一个文件往IIS服务器上一扔,就
- 简介:本篇博客主要包括recyclerview添加多种布局以及添加头布局和尾布局,还有item点击事件思路:主要重写Recyclerview
- ?随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多。每一种组件与Spring容器整合需要实现相关代码。SpringMVC框