图像处理和二位进制运算

图像处理和二位进制运算

1.RGB的二进制编码:

RGB每个原色码用一个字节(8bit)二进制码表达0-255

将RGB的三个字节的二进制码存入一个int(32bit)的整数中
而如果要转化为RGB,则需要将一个int(32bit)拆分为3个字节R G B

操作:

1.直接操作这个数的二进制进行移动

​ 右移:>>

​ 高位缺失补零,低位被挤出则丢掉,最后保留想要的结果

​ 左移:<<

​ 高位被挤出的丢掉,低位缺失的补0

2.运算:二进制码的与运算

​ 相同保留原码,不同为0

​ 如green:

​ 0000 0000 0000 0000 1111 1111 1011 1011&

​ 0000 0000 0000 0000 0000 0000 1111 1111=

​ 0000 0000 0000 0000 0000 0000 1011 1011

经过一系列操作成功提取出想要的G

int pix=14671839;
        int red=(pix>>16)&0xFF;
        System.out.println("Red:"+red);
        int green=(pix>>8)&255;
        System.out.println("Green:"+green);
        int blue=(pix)&255;
        System.out.println("Blue:"+blue);

2.图像处理

首先编写对于图像像素值的提取

 public int[][] getPixelArray(String imgPath){
        File file = new File(imgPath);
        BufferedImage buffimg=null;
     	//通过IO读取图片
        try {
            buffimg=ImageIO.read(file);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        int w=buffimg.getWidth();
        int h=buffimg.getHeight();
        System.out.println("w:"+w+" h:"+h);
        int [][] imgArr=new int[w][h];
     	//对像素值进行提取
        for(int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                imgArr[i][j]=buffimg.getRGB(i,j);
            }
        }
       //返回数组
        return imgArr;
    }

重写构造函数并且对像素值进行RGB提取处理

@Override
public void paint(Graphics g){
    super.paint(g);
    int [][] imgArr=getPixelArray("D:\\research\\uml作业\\w4图\\李老师.PNG");
    for(int i=0;i<imgArr.length;i++){
        for(int j=0;j<imgArr[i].length;j++){
            int pix=imgArr[i][j];
            int red=(pix>>16)&0xFF;
            int green=(pix>>8)&0xFF;
            int blue=(pix)&0xFF;

            Color color = new Color(red/2,green,blue);
            g.setColor(color);
            g.fillRect(100+i,100+j,1,1);
        }
    }

}
完成基本的图像提取处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值