2013-07-05 65 views
0

我正在使用一個顏色托盤應用程序,我必須生成不同的顏色深淺,並將其轉換爲其他顏色和深淺。 這是從位圖獲取所有像素的代碼。Android圖像處理,像素顏色和陰影

這裏mImage是我的位圖。

 int width = mImage.getWidth(); 
     int height = mImage.getHeight(); 
     int[] pixels = new int[width * height]; 
     mImage.getPixels(pixels, 0, width, 0, 0, width, height); 

你可以進一步看到這個鏈接,可能會告訴你如何生成陰影。

問題:我正在獲取所有顏色的整數值,如-34454323。 我很困惑如何找到給定的整數代碼是一些純色或本身純色的陰影。

另一個問題:是否有任何直接的方法來改變一個像素的色調和飽和度屬性到一些目標像素。

就像將深藍色像素轉換爲淺紅色像素一樣。

回答

0

可以使用BitmapShader,這裏是它一個很好的教程從羅曼蓋伊 http://www.curious-creature.org/2012/12/13/android-recipe-2-fun-with-shaders/

+0

感謝您的鏈接,但Bitmapshader是一切即將改變像素,那裏有我的問題是真正的亮度針對顏色和色調的色相和飽和度。 –

+0

這不是全部關於亮度,只有教程是關於亮度,使用位圖着色器,你也可以改變色調和飽和度,你也可以通過矩陣設置它們,看看這個片段ColorMatrix colorizerMatrix = new ColorMatrix(); colorizerMatrix.setSaturation(value); ColorMatrixColorFilter colorizerFilter = new ColorMatrixColorFilter(colorizerMatrix); mBitmapDrawable.setColorFilter(colorizerFilter); –

0

你得到這樣奇怪的錯誤的原因是回報的getPixels和數組「打包整型」 - 每一個代表一個Color對象(請參閱完整文檔here)。 int的每個8位分別是B,G,R顏色。

如果你想爲一個像素的RGB的精確值,你需要做的是這樣

// code untested 
int R = (intcolor >> 16) & 0xff; 
int G = (intcolor >> 8) & 0xff; 
int B = intcolor & 0xff; 
+0

我可以通過這些方法直接獲取RGB值 int redValue = Color.red(pixel); \t \t int blueValue = Color.blue(pixel); \t \t int greenValue = Color.green(pixel); 問題是,我真的想得到像素中最接近的純色之一。例如,如果像素是純黃色的一些變化,那麼我將如何知道它是黃色的變化。 –