Android Bitmap.getPixel всегда возвращает отрицательный

Я новичок в Android и уже четыре дня действительно работаю над этой проблемой. Буду очень признателен за чью-то помощь.

У меня есть изображение в 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>

3 ответа

Решение

Это, вероятно, потому что это не BitmapDrawable,

проверьте здесь /questions/43584656/preobrazovanie-drawable-v-rastrovoe-izobrazhenie-dlya-izmeneniya-tsveta-markera-v-google-maps-android-api-v2/43584663#43584663 на мой ответ правильный способ получения Drawable в Bitmap,

редактировать:

попробуй это:

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());

Ответ не верен: "Это, вероятно, потому что это не растровое изображение".

Как упоминалось в небольших комментариях, именно из-за размера целого числа, содержащего цвет. Получается отрицательный или положительный.

Итак: GetPixel возвращает правильный результат.

Может случиться так, что если вы установите изображение в соответствии с XY scaletype, вы можете получить неправильные значения. Удалите scaletype и попробуйте снова.

Другие вопросы по тегам