Java图像原理

图像原理

一张照片如何显示在屏幕上

  • 像素:分辨率决定单位面积里的像素点个数
  • 像素矩阵:像素点的值——颜色表达:R G B:0-255(共256(2^8/8Bit)个)
  • 单位:bit (比特)位。
  • 整数型:Byte(8)short(16) int(32/max:2^31 -1) long(64/max:2^63-1)
  • 数据- 处理 - 显示 字节/二进制码-处理 - 显示出来

像素值的存储

二维数组

把3个byte存入一个Int (一个int 是 4组 byte )
R B G
0000 0000 - 32位 (平平无奇的木马病毒聚集地)
0000 0000 - 24位 R
0000 0000 - 16位 G
0000 0000 - 低八位 B

存取

按位操作:>>位移运算符
R >>16
B >>8
G >>0

public class Byte_toint {
	public static void main(String[] args){
		int rgb =8421504;
		int red =rgb >>16;
		System.out.println("red:"+red);
		int green =rgb >>8;
		System.out.println("green:"+green);
		int blue =rgb >>0;
		System.out.println("blue:"+blue);
		
	}

}

只取低八位的数:& | !(与/或/非)
0xFF:低八位全部为1的数
相同保留,不同为1

public class Byte_toint {
	public static void main(String[] args){
		int rgb =8421504;
		int red =rgb >>16;
		System.out.println("red:"+red);
		int green =(rgb >>8)&0xFF;
		System.out.println("green:"+green);
		int blue =(rgb >>0)&0xFF;
		System.out.println("blue:"+blue);
		//这样就把一个Int拆成3个byte了
	}

}
调色板/马赛克等扩展处理实现
package 图形图像ps;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;
import java.awt.*;
import javax.swing.* ;
public class ImagePad extends JFrame {
	public ImagePad(){
		setTitle("像素画");
		setSize (1800,800);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
		
	}
	//重写方法JFrame 本身的绘画方法 paint
	//Graphics 图形——很多函数可以来绘制一些基础图形
	/**
	 * @param g
	 * setColor();
	 * drawLine Rect Oval
	 * fillRect Oval
	 */
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		//000 代表黑色   255 255 255白色
		Color color =new Color(255,0,255);
	    g.setColor(color);
	    g.fillRect(100, 100, 500, 500);
	    //随机数
	    Random random =new Random();
	    random.nextInt(256);
	    //随机一个数组的像素值
	    int[][]colorArr=new int[500][500];
	    for(int i= 0;i < 500;i++) {
	    	for(int j = 0;j < 500;j++) {
	    		int red =random.nextInt(256);
	    		int green =random.nextInt(256);
	    		int blue =random.nextInt(256);
	    		//Color rgbcolor = new Color(red,green ,blue);
	    		//rgbcolor.getRGB();
	    		int value=((255 & 0xFF)<< 24)|
	    				((red & 0xFF)<< 16)|
	    				((green & 0xFF)<< 8)|
	    				((blue & 0xFF)<< 0);
	    		colorArr[i][j] = value;
	    	}
	    }
	
	    //绘制原始图像
	    for(int i= 0;i < 500;i++) {
	    	for(int j = 0;j < 500;j++) {
	    		Color color1= new Color(colorArr[i][j]);
	    		g.setColor(color1);
	    		g.fillRect(100+i,100+j,1,1);
	    		
	    		
	    	}
	    }
	    	
	    //扩展处理:rbg 配比 灰度处理马赛克
	for (int i =0;i<500;i+=20) {
		for( int j=0;j<500;j+=20) {
			int value =colorArr[i][j];
			int red =(value>>16)&0xFF;
			int green =(value>>8)&0xFF;
			int blue =(value>>0)&0xFF;
			int grey =(red+green+blue)/3;
			Color color1 = new Color(grey,grey,grey);
			g.setColor(color1);
			g.fillRect(610+i, 100+i,30, 30);
		}
	}
		
	}

	
	
	public static void main (String[] args) {
		new ImagePad();//显示界面
		
	}
	

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值