我有一個透明背景的.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. 如何以編程方式更改圖像按鈕圖標的顏色?
- 3. 如何以編程方式更改Highcharts中的顏色選項?
- 4. 如何更改android中的SeekBar顏色? (以編程方式)
- 5. 如何以編程方式更改按鈕的背景顏色
- 6. 如何以編程方式更改文本的顏色?
- 7. 以編程方式更改背景顏色的視圖
- 8. 如何以編程方式更改TabLayout標題顏色?
- 9. 如何以編程方式更改ngTable標題顏色?
- 10. 如何以編程方式更改對話框背景顏色?
- 11. 如何以編程方式在圓上動態更改顏色
- 12. android如何以編程方式更改進度欄顏色
- 13. 如何以編程方式更改ActionBar menuitem文本顏色?
- 14. 以編程方式更改文件夾圖標顏色
- 15. 以編程方式更改圖像
- 16. 如何以編程方式更改AvalonEditor中的默認顏色以獲得c#
- 17. 在高圖中以編程方式更改面積圖的顏色
- 18. 以編程方式在C中更改顏色#
- 19. 以編程方式更改佈局的佈局顏色
- 20. 以編程方式更改某些文本的背景顏色
- 21. 以編程方式更改highcharts spline系列的顏色?
- 22. 以編程方式更改supportActionBar的顏色
- 23. 以編程方式更改形狀的顏色範圍
- 24. 以編程方式更改ListView行的背景顏色(wpf)
- 25. 如何以編程方式更改android中的Edittext光標顏色?
- 26. Swift:如何在tableViewController中以編程方式更改tableHeaderView的邊框顏色
- 27. 如何在iPhone SDK中以編程方式更改鍵盤的背景顏色?
- 28. 如何在Xamarin中以編程方式更改導航欄的背景顏色?
- 29. 如何以編程方式將狀態欄顏色更改爲黑色
- 30. 如何以編程方式更改tabbarItem的圖像
是的,它可以工作,但它不會改變任何顏色,甚至有點偏黑,這意味着任何別名的圖像最終都會看起來很醜。 – funkybro 2010-02-15 09:12:52