Я не могу LogCat это значение.Зачем? - PullRequest
0 голосов
/ 30 июня 2010

Вот фрагмент, который успешно считывает в Eclipse LogCat высоту и ширину .PNG на SD-карте:

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

//...

        Bitmap bmp = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sample.png"); 
        int width = bmp.getWidth(); 
        int height = bmp.getHeight();
        int[] pix = new int[width * height]; 
        bmp.getPixels(pix, 0, width, 0, 0, width, height); 

        int R, G, B; 

        for (int y = 0; y < height; y++){
            for (int x = 0; x < width; x++) 
            {               
                int index = y * width + x;

                R = (pix[index] >> 16) & 0xff;     //bitwise shifting
                G = (pix[index] >> 8) & 0xff;
                B = pix[index] & 0xff;

    // [This is where I'd put it.  But I can't get a red line off the editor when I do anything.]  
            }
        }

        Log.v(TAG, width + "  " + height); 

Моя проблема: я не могу всю жизнь использовать Log.v (), чтобы сообщить значение R или G или B. Все, что я делаю, рисует красную линию под v или что-то еще при попытке , Я пытался toString () и все. Помогите, пожалуйста. Спасибо.

Ответы [ 2 ]

1 голос
/ 30 июня 2010

Вы должны войти в пределах цикла, чтобы зарегистрировать каждый пиксель. Это было то, где вы пытались войти?

Если вы пытались записать его в том же месте, что и высота и ширина, какое значение пикселя вы ожидали записать? Что если изображение было пустым? Если это то, что вы пытались сделать, ошибка могла быть связана с использованием неинициализированных переменных ... но эта ошибка просто приводит к более глубокому вопросу о том, что именно вы пытаетесь сделать.

РЕДАКТИРОВАТЬ: Хорошо, получается, что это немного отличалось - это хороший пример того, почему важно дать код, который не работает, а также код, который не является, и сказать, что сообщение об ошибке.

Итак, вы пытались вызвать метод с такой подписью:

void v(String, String)

Но вы пытались назвать это так:

Log.v(TAG, R);

, который пытается передать int как String. Вам необходимо преобразовать значение int в строку. ИМО, лучший способ сделать это с String.valueOf:

Log.v(TAG, String.valueOf(R));

Сказав, что, если вы выполните конкатенацию строк, компилятор добавит преобразование для вас. Таким образом, вы можете сделать одно из следующих действий:

Log.v(TAG, R + " " + G + " " + B);
Log.v(TAG, "Red: " + R);

В качестве дополнительного примечания я настоятельно рекомендую, что если это доставит вам немало хлопот, стоит прочитать хорошую вводную книгу по Java - ту, в которой не фокусируется на Android, - и попробовать написание небольших консольных приложений Java на некоторое время. Для начала достаточно сложно научиться разрабатывать на новой клиентской платформе, не пытаясь одновременно изучать язык. Потратив немного больше времени на изучение языка, вы, вероятно, сэкономите усилия в долгосрочной перспективе.

0 голосов
/ 30 июня 2010

О. решено: java.lang.String имеет метод valueOf. (Я тоже новичок в Java.) Спасибо, Джон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...