做图片处理必须要懂的基础知识
我们所见的图片其实是填满颜色的不规则图像(通常情况下是矩形// 如果不是矩形也可以当成矩形补足矩形即可)
所以要处理图片只需要打印出矩形然后拿到对应点的颜色二进制数组即可
图片矩阵 ----->比如是一个 16*16 的一个矩阵
以图片w 为x轴
以图片h 为y轴
通过循环去提取图片矩阵每个颜色点
打印一个矩阵需要两个循环
x轴与y轴的交点为一个颜色点
根据当前颜色点计算对应的ARGB(这个是Java层的排列)
C层机制刚好相反排列是ABGR(所以C层计算颜色分量值时需要C层的机制去取值)
eg:(一个颜色点的二进制值表示)
***延伸的知识点 置于为什么会用4个二进制去表达一个颜色点
因为图片有对应的格式 ARGB_8888/RGB_656、ARGB_4444等等
其中ARGB就是4个字节的(然后一个字节对应一个二进制)
其他的自行查阅对应的字节数
为了方便理解以下三种表达方式是同一种颜色
以"|" 间隔表示方式
1111 1111 | 0100 1001 | 0001 0101 | 1101 0010
连续表示方式
11111111 01001001 00010101 11010010
A R G B
各个偏量的计算公式(具体的推导过程是根据颜色的分量排列移动的位数
"与&"上颜色的最大值(0xFF 也就是 255)计算得出对应位置的值)
***注意这里是C层的推导 java层的推导需要按java层的排列来推导这里不展示
color 表示当前颜色点的数组
A(alpha 透明) (color>>24)&0xFF
B(blue蓝色) (color>>16)&0xFF
G(green 绿色) (color>>8)&0XFF
R(red 红色) color & 0xFF
android NDK 支持Bitmap对象的库
jnigraphics #JNI层,添加bitmap支持
api支持
AndroidBitmapInfo
通过 AndroidBitmap_getInfo() 将AndroidBitmapInfo指针地址赋值