我正在尋找以編程方式更改背景圖像(PNG)的色調。這怎麼能在Android上完成?Android:如何更改圖像的色調?
3
A
回答
2
鏈接的柱具有一些好的想法,但是用於ColorFilter的矩陣數學可以是(a)中複合矯枉過正,和(b)中所得到的顏色引入可察覺的變化。
在此處修改janin給出的解決方案 - https://stackoverflow.com/a/6222023/1303595 - 我在Photoshop's 'Color' blend mode上根據此版本。這似乎避免因PorterDuff.Mode.Multiply圖像變暗,而且運作非常良好的色彩着色去飽和/人造黑&白圖像不失大的反差。
/*
* Going for perceptual intent, rather than strict hue-only change.
* This variant based on Photoshop's 'Color' blending mode should look
* better for tinting greyscale images and applying an all-over color
* without tweaking the contrast (much)
* Final color = Target.Hue, Target.Saturation, Source.Luma
* Drawback is that the back-and-forth color conversion introduces some
* error each time.
*/
public void changeHue (Bitmap bitmap, int hue, int width, int height) {
if (bitmap == null) { return; }
if ((hue < 0) || (hue > 360)) { return; }
int size = width * height;
int[] all_pixels = new int [size];
int top = 0;
int left = 0;
int offset = 0;
int stride = width;
bitmap.getPixels (all_pixels, offset, stride, top, left, width, height);
int pixel = 0;
int alpha = 0;
float[] hsv = new float[3];
for (int i=0; i < size; i++) {
pixel = all_pixels [i];
alpha = Color.alpha (pixel);
Color.colorToHSV (pixel, hsv);
// You could specify target color including Saturation for
// more precise results
hsv [0] = hue;
hsv [1] = 1.0f;
all_pixels [i] = Color.HSVToColor (alpha, hsv);
}
bitmap.setPixels (all_pixels, offset, stride, top, left, width, height);
}
4
我測試了接受的答案,不幸的是它返回了錯誤的結果。我發現,從here修改這個代碼的正常工作:
// hue-range: [0, 360] -> Default = 0
public static Bitmap hue(Bitmap bitmap, float hue) {
Bitmap newBitmap = bitmap.copy(bitmap.getConfig(), true);
final int width = newBitmap.getWidth();
final int height = newBitmap.getHeight();
float [] hsv = new float[3];
for(int y = 0; y < height; y++){
for(int x = 0; x < width; x++){
int pixel = newBitmap.getPixel(x,y);
Color.colorToHSV(pixel,hsv);
hsv[0] = hue;
newBitmap.setPixel(x,y,Color.HSVToColor(Color.alpha(pixel),hsv));
}
}
bitmap.recycle();
bitmap = null;
return newBitmap;
}
+0
此代碼有效,但速度很慢。任何想法優化? – 2018-02-25 18:31:34
相關問題
- 1. 如何更改圖像中紅色的默認色調?
- 2. Xcode更改圖像的色調
- 3. 更改圖像的顏色android
- 4. Android - 更改位圖的像素顏色
- 5. Android在更改圖像時更改了像素的顏色
- 6. 如何更改圖像的顏色
- 7. 改變圖像的色調
- 8. 我如何更改/調換圖像中的顏色?
- 9. 圖像懸停如何更改顏色
- 10. 更改圖像的顏色
- 11. 更改圖像的顏色
- 12. 如何將圖像的顏色更改爲android中的黑白圖像
- 13. 如何更改Android上的ImageView圖像
- 14. 如何選擇調色板上的顏色來更改圖像的一部分?
- 15. Android如何根據背景圖像更改文本顏色
- 16. 如何更改iOS中標籤欄中未選圖像的色調顏色?
- 17. 根據滑塊圖像的色調更改菜單顏色
- 18. 更改ImagePlus圖像顏色
- 19. 更改圖像顏色
- 20. Java更改圖像顏色
- 21. 如何將圖像的背景顏色更改爲綠色?
- 22. 如何將Radwindow加載圖像的顏色更改爲藍色
- 23. 如何更改顏色並將圖像添加到圖像
- 24. 如何在C#.NET中更改圖像的像素顏色
- 25. 如何更改圖像某些像素的顏色?
- 26. 通過調色板着色圖像Android
- 27. iOS/Objective-C:更改圖像視圖的色調
- 28. PHP圖像調整大小黑色背景 - 更改顏色
- 29. 使用調色板更改圖像按鈕顏色
- 30. 色調的圖像不想改變
檢查這個帖子http://stackoverflow.com/questions/4354939/understanding-the-use-of-colormatrix-and-colormatrixcolorfilter-to-modify -a-draw – JRaymond 2012-04-20 23:07:06