将位图着色为另一种颜色

时间:2013-05-29 10:35:43

标签: java android

我想逐渐将一个位图从一种颜色到另一种颜色(就好像它会从不那么红色发光到逐渐变红一样。

我按照像素执行此操作,但这会导致应用程序跳转,有人可以向我展示更有效的方法吗?

private void adjustCountryBitmapColor()
{
    //TODO Possible memory leak in this method.
    mAllPixels = new int [ mCountryBitmap.getHeight()* mCountryBitmap.getWidth()];
    mCountryBitmap.getPixels(mAllPixels, 0, mCountryBitmap.getWidth(), 0, 0, mCountryBitmap.getWidth(),mCountryBitmap.getHeight());


    /*
    int alpha=argb>>24;
    int red=(argb & 0x00FF0000)>>16;
    int green=(argb & 0x0000FF00)>>8;
    int blue=(argb & 0x000000FF);
    */

    for(int i =0; i< mCountryBitmap.getHeight()*mCountryBitmap.getWidth(); i++)
    {
        if(mAllPixels[i]>>24 == -1)
        {
            /*AllPixels[i] == Color.BLACK)
            {
                mAllPixels[i] = Color.RED;
            }
            */


            mAllPixels[i] = Color.RED;


        }
    }

    System.out.println(mDeltaOffSet);

    //int alpha = mAllPixels[0]>>24;

    //System.out.println(alpha);

    mCountryBitmap.setPixels(mAllPixels, 0, mCountryBitmap.getWidth(), 0, 0, mCountryBitmap.getWidth(), mCountryBitmap.getHeight());
}

2 个答案:

答案 0 :(得分:0)

不要创建一个中间位图,这将花费太长时间;正是因为这个原因Canvas#drawBitmap(int[],....)。另外,请查看带有Paint#setColorFilter()ColorMatrixFilter的{​​{1}}是否可以涵盖您的颜色转换。

答案 1 :(得分:0)

我找到了一个使用GPU的好的图像处理库。它非常快,你可以做现场摄像机以及即时图像处理。

图书馆由 javierpuntonet / android-gpuimage 提供。只要看看它,我相信你会得到使用它的好处。