我是一名使用Android的新手,並且現在已經在爲這個問題工作了四天。我真的很感謝某人的幫助。Android Bitmap.getPixel總是返回負數
我在ImageView中有一個圖像,我想要獲取用戶觸摸的圖像部分的顏色。爲此我使用Bitmap.getPixel()函數。問題是,這個函數的返回值總是負的,正如文檔所說的那樣,是錯誤的。我沒有得到正確的顏色值,我真的嘗試過幾種方法(RGB,HSV ...)。請有人解釋我,爲什麼我的Bitmap.getPixel()函數始終返回負值?提前致謝。
這裏是我的.java代碼:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageView1);
imageView.setOnTouchListener(new ImageView.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
Drawable imgDrawable = ((ImageView)imageView).getDrawable();
Bitmap mutableBitmap = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(mutableBitmap);
imgDrawable.draw(canvas);
int pixel = mutableBitmap.getPixel((int)event.getX(), (int)event.getY());
Log.i("PIXEL COLOR", ""+pixel);
int alpha = Color.alpha(pixel);
int red = Color.red(pixel);
int blue = Color.blue(pixel);
int green = Color.green(pixel);
String color = String.format("#%02X%02X%02X%02X", alpha, red, green, blue);
Log.i("RGB", color);
float[] hsv = new float[3];
Color.RGBToHSV(red, green, blue, hsv);
Log.i("HSV_H", "Hue=" + hsv[0]);
Log.i("HSV_H", "Saturation=" + hsv[1]);
Log.i("HSV_H", "Value=" + hsv[2]);
}
return true;
}
});
}
}
這裏是我的.xml代碼:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="fitXY"
android:src="@drawable/lapices" />
</LinearLayout>
我看過這個例子。對不起,但我很困惑。它使用位圖和Drawable類,但不使用BitmapDrawable類。你的意思是我應該使用BitmapDrawable類而不是Bitmap類嗎?對於這些問題抱歉,但這有點令人困惑,而且我也很難理解Bitmap和Drawable之間的區別。 – patriciasc
位圖只是一個有點像素信息的ByteArray。 Drawable是可以用來繪製成Canvas的東西。 BitmapDrawable是Drawable的一個擴展類,恰好在畫布上繪製一個位圖。 該示例代碼所做的並不在乎使用了哪種類型的Drawable,只需要將其繪製到具有位圖的畫布中即可。這樣,該位圖上的所有字節將獲得他們的顏色 – Budius
感謝您的反應Budious,非常感謝。這次我使用畫布更改了代碼,就像我在例子中看到的那樣,但我仍然得到一個負值。我不知道我是否理解這個權利,但我猜測我並不完全。 – patriciasc