我有一个透明背景的.PNG图像和一个黑色的绘图,我如何将这个图像中的“黑色绘图颜色”更改为我想要编程的任何颜色;使用rim 4.5 API? 感谢提前...。如何以编程方式更改图像中的颜色?
回答
我找到了解决方案,在这里它是为那些有兴趣的人。
Bitmap colorImage(Bitmap image, int color) {
int[] rgbData= new int[image.getWidth() * image.getHeight()];
image.getARGB(rgbData,
0,
image.getWidth(),
0,
0,
image.getWidth(),
image.getHeight());
for (int i = 0; i < rgbData.length; i++) {
int alpha = 0xFF000000 & rgbData[i];
if((rgbData[i] & 0x00FFFFFF) == 0x00000000)
rgbData[i]= alpha | color;
}
image.setARGB(rgbData,
0,
image.getWidth(),
0,
0,
image.getWidth(),
image.getHeight());
return image;
}
您可以解析图像RGB搜索黑色,并用任何你想要的颜色取代它。
谢谢阿里....在下一篇文章中,你会发现实现。 – 2010-02-14 10:14:38
不客气,而且很好的实现。 – 2010-02-14 10:48:42
您可以将您的PNG图像读入字节数组并编辑调色板块。 此方法仅适用于PNG-8图像。 这里是我的代码:
public static Image createImage(String filename) throws Throwable
{
DataInputStream dis = null;
InputStream is = null;
try {
is = new Object().getClass().getResourceAsStream(filename);
dis = new DataInputStream(is);
int pngLength = dis.available();
byte[] png = new byte[pngLength];
int offset = 0;
dis.read(png, offset, 4); offset += 4; //‰PNG
dis.read(png, offset, 4); offset += 4; //....
while (true) {
//length
dis.read(png, offset, 4); offset += 4;
int length = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
//chunk type
dis.read(png, offset, 4); offset += 4;
int type = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
//chunk data
for (int i=0; i<length; i++) {
dis.read(png, offset, 1); offset += 1;
}
//CRC
dis.read(png, offset, 4); offset += 4;
int crc = (png[offset-1]&0xFF) | ((png[offset-2]&0xFF)<<8) | ((png[offset-3]&0xFF)<<16) | ((png[offset-4]&0xFF)<<24);
if (type == 0x504C5445) { //'PLTE'
int CRCStart = offset-4;
int PLTEStart = offset-4-length;
//modify PLTE chunk
for (int i=PLTEStart; i<PLTEStart+length; i+=3) {
png[i+0] = ...
png[i+1] = ...
png[i+2] = ...
}
int newCRC = crc(png, PLTEStart-4, length+4);
png[CRCStart+0] = (byte)(newCRC>>24);
png[CRCStart+1] = (byte)(newCRC>>16);
png[CRCStart+2] = (byte)(newCRC>>8);
png[CRCStart+3] = (byte)(newCRC);
}
if (offset >= pngLength)
break;
}
return Image.createImage(png, 0, pngLength);
} catch (Throwable e) {
throw e;
} finally {
MainCanvas.closeInputStream(dis);
MainCanvas.closeInputStream(is);
}
}
你能解释为什么你增加了抵消?偏移参数的目的是什么? – 2013-01-24 16:08:13
'offset'只是文件中的当前位置 - 我们读取流并将其写入当前位置的数组。但是这段代码已经3年了 - 现在看来,将整个文件读入数组然后编辑这个数组会更好:) – 2013-01-24 16:21:13
- 1. 你能以编程方式更改图像的颜色吗?
- 2. 以编程方式更改colorControlActivated颜色
- 3. 如何以编程方式更改图像按钮图标的颜色?
- 4. 如何以编程方式更改imageView的色调颜色?
- 5. 如何更改android中的SeekBar颜色? (以编程方式)
- 6. 如何以编程方式更改colors.xml中的颜色值?
- 7. 如何以编程方式更改Highcharts中的颜色选项?
- 8. 如何以编程方式更改Drawable的颜色而不着色Alpha像素
- 9. 如何以编程方式更改按钮的背景颜色
- 10. 如何以编程方式更改文本的颜色?
- 11. 如何以编程方式更改Tkinter标签的颜色?
- 12. 以编程方式更改背景颜色的视图
- 13. 如何以编程方式更改TabLayout标题颜色?
- 14. 如何以编程方式在圆上动态更改颜色
- 15. android如何以编程方式更改进度栏颜色
- 16. 如何以编程方式更改ActionBar menuitem文本颜色?
- 17. 如何以编程方式更改对话框背景颜色?
- 18. 如何以编程方式更改ngTable标题颜色?
- 19. 如何以编程方式更改颜色和图像之间的图像视图内容?
- 20. 是否有可能以编程方式更改图像的颜色?
- 21. 以编程方式更改图像
- 22. 以编程方式更改图像源
- 23. 以编程方式更改层列表中形状的颜色
- 24. 以编程方式更新颜色
- 25. 以编程方式更改GridView控件的行颜色格式
- 26. 如何以编程方式更改AvalonEditor中的默认颜色以获得c#
- 27. 如何以编程方式更改Corona中显示的图像?
- 28. 如何以编程方式更改绘图资源的背景颜色
- 29. 在高图中以编程方式更改面积图的颜色
- 30. 以编程方式在C中更改颜色#
是的,它可以工作,但它不会改变任何颜色,甚至有点偏黑,这意味着任何别名的图像最终都会看起来很丑。 – funkybro 2010-02-15 09:12:52