Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Java中动态更改图像的前景色(保留alpha透明度)_Java_Android_Image_Bitmapimage - Fatal编程技术网

在Android Java中动态更改图像的前景色(保留alpha透明度)

在Android Java中动态更改图像的前景色(保留alpha透明度),java,android,image,bitmapimage,Java,Android,Image,Bitmapimage,我有一个透明背景的红色球的图像。我想通过编程将球的颜色更改为许多其他颜色,而不影响背景,即背景应保持透明。如何在Android中实现这一点?您可以使用位图类以这种方式修改图像,例如使用setPixel()方法。您只需确保颜色仍将其alpha设置为透明 有关使用RGB和Alpha通道定义颜色的信息,请参阅Color文档(您希望保留每个像素的Alpha值,而只更改RGB值)。另请参阅位图文档,您也可以使用来实现它。使用具有不同球颜色的同一球图像的不同图片,并使用帧动画将图像作为帧运行。如果是这样,则

我有一个透明背景的红色球的图像。我想通过编程将球的颜色更改为许多其他颜色,而不影响背景,即背景应保持透明。如何在Android中实现这一点?

您可以使用
位图
类以这种方式修改图像,例如使用
setPixel()
方法。您只需确保颜色仍将其alpha设置为透明


有关使用RGB和Alpha通道定义颜色的信息,请参阅
Color
文档(您希望保留每个像素的Alpha值,而只更改RGB值)。另请参阅
位图
文档

,您也可以使用来实现它。使用具有不同球颜色的同一球图像的不同图片,并使用帧动画将图像作为帧运行。如果是这样,则球的颜色看起来正在更改。

尝试:

//Bitmap bmp
//int color 
int[] pixels = new int[bmp.getWidth() * bmp.getHeight()];
bmp.getPixels(pixels, 0, bmp.getWidth(), 0, 0,
            bmp.getWidth(), bmp.getHeight());
for (int i = 0; i < pixels.length; i++) {
pixels[i] &= color;
}
Bitmap newBmp = Bitmap.createBitmap(bmp.getWidth(),
bmp.getHeight(), Config.ARGB_8888);
newBmp.setPixels(pixels, 0, newBmp.getWidth(), 0, 0, newBmp.getWidth(), newBmp.getHeight());
//位图
//内色
int[]像素=新的int[bmp.getWidth()*bmp.getHeight()];
bmp.getPixels(像素,0,bmp.getWidth(),0,0,
bmp.getWidth(),bmp.getHeight();
对于(int i=0;i
您的查询非常通用。有多种方法可以做到这一点,但是在不了解实际用例的情况下,很难提到正确的方法。你能详细说明一下你想要达到的目标吗?在游戏屏幕上,会弹出许多不同颜色的球。我不想使用多个图像,而是想使用一个图像并动态修改其颜色。你的意思是我只需要指定rgb而不是alpha,它将从图像数据本身获取?是的。您需要使用
getPixel()
获取每个像素的颜色,只更改红/绿/蓝值(将alpha保持在其当前值),然后使用新颜色调用
setPixel()
。如果alpha值没有改变,透明度应该与原始图像保持一致。这不是资源消耗,只是时间消耗。我的建议是,在开始游戏之前,以编程方式创建所有图像,然后作为变量存储。当您想要更改球的颜色时,只需指向不同的变量。在游戏开始前创建彩色球意味着在使用重新存储的图像时,不会对性能造成任何影响。100x100应该不会太耗时,但仍比从变量(内存)中重新调用图像慢。任何系统(PC、游戏机、移动设备)上的大多数游戏在游戏开始时都会有一个“加载”时间,以便将所有图像加载到内存中,以便它能够更快地访问这些图像,即使这对于100x100图像并不重要,这可能仍然是一个很好的做法。如果你要反复使用这些颜色,将它们存储在内存中也会很有好处。这样,如果你要将球改为“绿色”,你只需要计算一次,而不是每次你想要一个“绿色”球时都计算一次。