我无法LogCat这个值。为什么?

时间:2010-06-30 06:19:54

标签: android

这是一个成功向Eclipse LogCat读取SD卡上.PNG的高度和宽度的剪辑:

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 个答案:

答案 0 :(得分:1)

您必须在循环中记录才能记录每个像素。那是你试图记录的地方吗?

如果您尝试将其记录在与高度和宽度相同的位置,您希望记录哪个像素的值?如果图像是空的怎么办?如果这是你想要做的,错误将是由于使用了未初始化的变量......但是这个错误只会导致更深层次的问题,即你正在尝试做什么。

编辑:好的,事实证明它略有不同 - 这是一个很好的例子,说明为什么重要的是给出失败的代码以及不是的代码,并说出错误消息是什么。

所以你试图用这个签名调用一个方法:

void v(String, String)

但你试图这样称呼它:

Log.v(TAG, R);

试图将int作为String传递。您需要将int值转换为字符串。 IMO,最好的方法是使用String.valueOf

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

话虽如此,如果你做任何字符串连接,编译器会为你添加转换。所以你可以做以下任何一种:

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

作为旁注,我强烈建议如果这给你带来困难,那么值得阅读一本好的介绍性Java书 - 专注于Android - 尝试编写小型Java控制台应用程序一段时间。学习如何在新的客户端平台上开发是很困难的,而不是试图同时学习一门语言。通过预先在语言上投入更多时间,从长远来看,您可能会省力。

答案 1 :(得分:0)

喔。解决:java.lang.String有一个valueOf方法。 (我也是Java新手。)谢谢Jon。