Android getPixels
我目前正在开发一个程序,将边缘检测应用于预览帧的某个区域。我已经使用了previewcallback并获得了裁剪后的位图,并使用以下方法将其转换为灰度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 {
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,还可以在运行时通过在表达式视图中放置断点并添加所需的值(也可以是数组)来查看值。对我来说更方便,因为您还可以出于调试目的更改值。