Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android getPixels_Android_Indexing_Pixel_Grayscale - Fatal编程技术网

Android getPixels

Android getPixels,android,indexing,pixel,grayscale,Android,Indexing,Pixel,Grayscale,我目前正在开发一个程序,将边缘检测应用于预览帧的某个区域。我已经使用了previewcallback并获得了裁剪后的位图,并使用以下方法将其转换为灰度 int height1=120; int width2=120; final Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 260, 15, width2, height1); try {

我目前正在开发一个程序,将边缘检测应用于预览帧的某个区域。我已经使用了previewcallback并获得了裁剪后的位图,并使用以下方法将其转换为灰度

int height1=120;
int width2=120;

            final Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 260, 15, 
                    width2, height1);
            try {
                int bWidth = resizedBitmap.getWidth();
                int bHeight = resizedBitmap.getHeight();
                int[] pixels = new int[bWidth * bHeight];
                resizedBitmap.getPixels(pixels, 0, bWidth, 0, 0, bWidth, bHeight);
                for (int y = 0; y < bHeight; y++){
                    for (int x = 0; x < bWidth; x++){
                        int index = y * bWidth + x;
                        int R = (pixels[index] >> 16) & 0xff;     //bitwise shifting
                        int G = (pixels[index] >> 8) & 0xff;
                        int B = pixels[index] & 0xff;
                        int gray = (int) (.299 * R + .587 * G + .114 * B);
                    }
                }
int高度1=120;
int宽度2=120;
最终位图resizedBitmap=Bitmap.createBitmap(bmp,260,15,
宽度2,高度1);
试一试{
int bWidth=resizedBitmap.getWidth();
int bHeight=resizedBitmap.getHeight();
int[]像素=新的int[bWidth*bHeight];
getPixels(像素,0,宽度,0,0,宽度,宽度);
对于(int y=0;y>16)&0xff;//按位移位
int G=(像素[索引]>>8)&0xff;
int B=像素[索引]&0xff;
灰色整数=(整数)(.299*R+.587*G+.114*B);
}
}
我对此很陌生,我想知道gray是一个120x120像素的2D数组,还是每个循环的gray值都被覆盖


抱歉,如果这是非常基本的

好吧,也许我遗漏了什么,但据我所知,
灰色
被覆盖了。您需要类似

int[][] gray = new int[width][height];
// start loop
在循环中:

gray[x][y] = ...;

谢谢,我会试一试。我正在努力使用Android进行调试,因为我不能只打印数组。(以前在Matlab上工作过)Android确实需要一种与使用Matlab非常不同的思维方式,我感觉到了你的痛苦。不过,要“打印”数组和对象,请尝试Log.d(“MyAppName”,myArray.toString());然后在logcat中查看打印出的内容如果使用eclipse,还可以在运行时通过在表达式视图中放置断点并添加所需的值(也可以是数组)来查看值。对我来说更方便,因为您还可以出于调试目的更改值。