1

假设我有这个位图,它是一个全黑的随机形状,并说我想改变它的颜色,我的位图必须先全部涂成白色还是有别的东西?

4

1 回答 1

4

如果您使用 Canvas 更改位图颜色的方法是更改​​位图本身。涉及的步骤如下:

假设您想加载您在某处拥有的现有位图,并且您想以某种方式将其染成红色。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bitmap);

之后,您要在将其绘制到画布上之前修改位图的像素。您创建一个包含所有像素的 int 数组。

int[] pixels;
bitmap.getPixels(pixels, 0, 0, 0, 0, width, height);

之后,您需要修改数组(例如,添加到红色组件)。但是,现在我们所拥有的只是像素数组中的 int 值。R,G和B都装在里面。如何找回它们?

int red = Color.red(pixels[n]);
int green = Color.green(pixels[n]);
int blue= Color.blue(pixels[n]);

然后你可以随意修改像素的值,你可以把它放在一个循环中或者你喜欢的任何东西,然后把它放回像素数组。此外,RGB 值的范围是 0-255,因为它们是 8 位值。

之后,您将使用完全相反的功能将它们放回原处。

bitmap.setPixels(pixels, 0, 0, 0, 0, width, height);

然后你就可以调用 Canvas.drawBitmap();

请记住,如果您经常这样做,这个过程应该会很慢,此外,如果您对游戏等实时应用程序感兴趣,Canvas 是一种缓慢的做事方式。

希望它有所帮助!

于 2012-07-12T10:53:36.550 回答