SkPaint pa;
pa.setColor(0xff123456);
SkRect r;
r.set(0,0,100,100);
srccanvas.drawRect(r,pa);
unsigned char* add = (unsigned char*)sf->data;
LOGD("0x%x,  0x%x,  0x%x,  0x%x",add[0],add[1],add[2],add[3]);
       打印显示:0x12, 0x34, 0x56, 0xff
                  r     g      b     a
打印出来的像素排列方式为 rgba格式。请问,在drawRect中有对像素格式进行转化吗?
如果是按0xff123456这个格式排列的话,打印出来的应该是:0x56, 0x34, 0x12, 0xff
貌似r,b交换位置了。在什么地方有颜色格式的转化吗?

解决方案 »

  1.   

    unsigned char* add = (unsigned char*)sf->data;这行代码很神奇,java代码里面肯定没有指针这玩意。难道你这是c/c++写的? 
    如果是,那么你应该会做4个字节的倒序排列吧? 没什么困难啊
      

  2.   

    是在jni层使用c++写的,每个像素点做转换会很慢。我的意思是android本身有没有转换的地方
      

  3.   

    android中Color是一个整形值,是以 A R G B追加的方式组成的。
    即A<<24 | R<<16 | G<<8 | B的方式组成的。
    你是不是可以自己转换呢?
    比如有个颜色值是Color= 0x FF DD 99 88
    A= Color>>>24
    R=Color>>16&0xFF
    G=Color>>8&0xff
    B=Color&0xff
      

  4.   

    那你这rgb数组是怎么得到的呢?一般来说是先从网络下载图片文件,然后生成java里的图片对象,然后根据图片对象得到RGB数组。这时候,有参数可以选择RGB数组的顺序