这是一个成功向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()和一切。请帮忙。感谢。
答案 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。