我正在尝试制作自定义画笔。当我触摸并移动手指时,我拍了一张图像并尝试在画布上绘制它。我有一个只有白色的星形png图像。我计划根据用户的颜色选择更改颜色。要改变颜色,我使用的颜色矩阵如下:
float[] colorTransform = { //For red color as of now
1f,0 , 0, 0,0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0};
ColorMatrix colorMatrix = new ColorMatrix();
// colorMatrix.setSaturation(0f); //Remove Colour
colorMatrix.set(colorTransform); //Apply the Red
ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);
Paint paint = new Paint();
paint.setColorFilter(colorFilter);
paint.setAntiAlias(true);
for (Point pos: positions)
canvas.drawBitmap(mBitmapBrush, pos.x, pos.y, paint);
一切似乎都能解决一个问题: “在绘制Bitmap时,我的星形周围会出现一个黑色的薄边框”。我用错误的方式使用colormatrix吗?有什么建议?
提前致谢。
答案 0 :(得分:0)
如果要使用颜色矩阵替换位图的原始颜色,请更改最右侧的列。
float[] colorTransform = {
0, 0, 0, 0, 255, // Set red component of each output pixel to max
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0}; // Copy over the alpha channel from the input
最后一列是偏移词。无论输入如何,它都会添加到结果中。在上面的例子中,255被添加到红色通道。
请注意,左上角的3x4子矩阵为空。这实际上丢弃了输入图像中的所有颜色信息。第5列再次添加颜色:用户选择的颜色。