Android在运行时反转位图

时间:2011-09-10 18:11:52

标签: android bitmap invert

我试图通过使用Paint ColorFilter来反转位图 我用这个链接作为参考: http://www.mail-archive.com/android-developers@googlegroups.com/msg47520.html

但它绝对没有效果 - 正常绘制位图你能告诉我我做错了什么吗?

定义浮点数组:

    float invert [] = { 
        -1.0f,  0.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  -1.0f,  0.0f,  1.0f,  0.0f, 
        0.0f,  0.0f,  -1.0f,  1.0f,  0.0f, 
        1.0f,  1.0f,  1.0f,  1.0f,  0.0f 

};

在构造函数中设置Paint

    ColorMatrix cm = new ColorMatrix(invert); 
    invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 

Draw()方法中的引用

c.drawBitmap(Bitmap, null, Screen, invertPaint);

编辑:我能够通过在绘图声明中进行绘画分配来使其工作:

ColorMatrix cm = new ColorMatrix(invert); 
invertPaint.setColorFilter(new ColorMatrixColorFilter(cm)); 
c.drawBitmap(rm.getBitmap(DefaultKey), null, Screen, invertPaint);

但是现在它呈现的速度非常慢(可能是因为它在每一帧中设置了一个复杂的矩阵)......当它采用相同的方法时,它是否有效?

EDIT2: 没关系!!!大声笑,问题是我有两个构造函数,我只在其中一个配置colorfilter ...进程仍然是CPU密集型并导致帧率问题

1 个答案:

答案 0 :(得分:4)

这是一个老线程。

但是:Matrix不适合反转具有透明度的抗锯齿图像。

应该是:

float invert[] =
{
-1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 
0.0f, -1.0f, 0.0f, 1.0f, 1.0f,
0.0f, 0.0f, -1.0f, 1.0f, 1.0f, 
0.0f, 0.0f, 0.0f, 1.0f, 0.0f
};