P6图片原理与读取图片对象操作

熟悉数字对象底层逻辑

二进制

按位符

  • &(按位与):参加运算的两个二进制数,同时为1,才为1,否则为0。举例 3&5=1。
  • |(按位或):参加运算的两个二进制数,一个为1就为1,否则为0。2 | 4=6
  • ^(按位异或):参与运算的两个二进制数,位不同则为1,位相同则为0。6 ^7=1
  • << (左位移运算符) >>(右位移运算符) >>>(无符号右位移运算符)

像素合成与拆分

像素的合成:

        int num = 33489151;

        int red = (num >> 16) & 0xFF;
        System.out.println (red);

        int b1 = num << 24;// 将最低位的8bit 移动到最高位
        int b2 = b1 >>> 24;// 不带符号右移
        System.out.println (b2);

像素的拆分:

        int value = ((a) << 24) |
                ((r) << 16) |
                ((g ) << 8) |
                ((b ) << 0);
        System.out.println (value);

文件读取图片,操作图片矩阵

  • 读取图片文件: ImageIcon 图标对象 不支持像素操作
  • 文件:都是由字节组成
  • IO流: ImageIO
    • 读 需要一个文件地址
    • 写 需要一个文件地址 格式
  • 缓存图片: BufferedImage
    public int[][] getImagePixs(String path){
        // 根据地址 创建一个File对象
        File file = new File (path);
        // URL URI
        // 使用对应的IO流读取文件
        try {
            // 读取到一张缓存图片
            BufferedImage buffimg = ImageIO.read (file);// 有强制异常 必须用try catch 封装处理好

            // 获取 缓冲图片对象的宽高
            int w = buffimg.getWidth ();
            int h = buffimg.getHeight ();
            // 根据宽高 创建一个对象大小的 二维数组
            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;
        } catch (IOException e) {
            e.printStackTrace ();
        }

        return null;


    }

注意要用到 try catch 封装 否则容易丢失文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值