熟悉数字对象底层逻辑
二进制
按位符
- &(按位与):参加运算的两个二进制数,同时为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;
}

被折叠的 条评论
为什么被折叠?



