如何更改画布上的图片颜色?

时间:2013-02-01 11:26:51

标签: android colors bitmap android-canvas draw

我有一张带有背景图片的画布,我可以在其上书写,绘制线条,放置较小的图片,旋转,缩放等。 我需要更改其中一个位图的颜色。 我有一个颜色选择器,看起来像这样:

public void colorChanged(int color) {
    if (isText) {
        myView.setTextColor(color);
    } else if(isDrawing) {
        mPaint.setColor(color);
        myView.setPaint(mPaint);
    } else if(ispic) {
           //TODO
    }
}

我尝试了类似于我所拥有的东西isText代码的一部分,但它只改变我放置的行后面的颜色,或者移动我的图片(如果我不改变颜色,它当前是透明的)。

myView是一个CustomView,我有onDraw方法。

2 个答案:

答案 0 :(得分:1)

您可以使用android中的ColorMatrix更改位图的颜色。

访问this post了解详情。 ColorMatrix here

的示例

答案 1 :(得分:1)

选项1:

Paint p = new Paint(Color.RED);
ColorFilter filter = new LightingColorFilter(Color.RED, 1);
p.setColorFilter(filter);

然后用Paint个对象绘制。

选项2:

    Bitmap sourceBitmap = BitmapFactory.decodeFile(imgPath);
    float[] colorTransform = {
            0, 1f, 0, 0, 0, 
            0, 0, 0f, 0, 0,
            0, 0, 0, 0f, 0, 
            0, 0, 0, 1f, 0};

    ColorMatrix colorMatrix = new ColorMatrix();
    colorMatrix.setSaturation(0f); //Remove Colour 
    colorMatrix.set(colorTransform); //Apply Red say

    ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
    Paint paint = new Paint();
    paint.setColorFilter(colorFilter);   

    Display display = getWindowManager().getDefaultDisplay(); 

    Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, (int)(display.getHeight() * 0.15), display.getWidth(), (int)(display.getHeight() * 0.75));            


    Canvas canvas = new Canvas(resultBitmap);
    canvas.drawBitmap(resultBitmap, 0, 0, paint);