繁体   English   中英

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

[英]I can't LogCat this value. Why?

这是一个片段,可以成功地将SD卡上.PNG的高度和宽度读取到Eclipse LogCat:

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()了。 请帮助。 谢谢。

您必须循环中进行记录才能记录每个像素。 那是您要记录的地方吗?

如果尝试将其记录在与高度和宽度相同的位置,那么您希望记录哪个像素值? 如果图像为空怎么办? 如果这是您要尝试执行的操作,则该错误可能是由于使用未初始化的变量而引起的……但是该错误只会导致更深层的问题,即您到底想做什么。

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

因此,您尝试使用此签名来调用方法:

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控制台应用程序。 在不尝试同时学习某种语言的情况下,很难学习如何在新的客户端平台上进行开发。 通过在语言上花更多时间,从长远来看,您可能会节省精力。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM