Java 如何在android中从位图中获取正像素值
我尝试了这段代码,在这里将imageView转换为位图图像,然后将其转换为灰度。但是我们想访问像素值,但是我们得到的所有像素值都是0。请有人帮助我们Java 如何在android中从位图中获取正像素值,java,android,image,get,pixels,Java,Android,Image,Get,Pixels,我尝试了这段代码,在这里将imageView转换为位图图像,然后将其转换为灰度。但是我们想访问像素值,但是我们得到的所有像素值都是0。请有人帮助我们 public Bitmap toGrayscale(Bitmap bmpOriginal) { int width, height; height = bmpOriginal.getHeight(); width = bmpOriginal.getWidth(); Bitmap bmpGray
public Bitmap toGrayscale(Bitmap bmpOriginal)
{
int width, height;
height = bmpOriginal.getHeight();
width = bmpOriginal.getWidth();
Bitmap bmpGrayscale = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(bmpGrayscale);
Paint paint = new Paint();
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);
c.drawBitmap(bmpOriginal, 0, 0, paint);
return bmpGrayscale;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
imageView = (ImageView) findViewById(R.id.imgView);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
imageView.buildDrawingCache();
Bitmap bmap = imageView.getDrawingCache();
image=toGrayscale(bmap);
ImageView imageView1 = (ImageView) findViewById(R.id.imgView1);
imageView1.setImageBitmap(image);
pixels = new int[image.getWidth()*image.getHeight()];
image.getPixels(pixels, 0, image.getWidth(), 0, 0, image.getWidth(), image.getHeight());
bu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
text3.setText(String.valueOf(pixels[m++]));
}
});
}
将
Bitmap.Config.RGB_565
更改为Bitmap.Config.ARGB_8888
活动结果受保护无效(int请求代码、int结果代码、意图数据){
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
imageView = (ImageView) findViewById(R.id.imgView);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
BitmapFactory.Options options=new BitmapFactory.Options();
try
{
InputStream is = getContentResolver().openInputStream(selectedImage);
Bitmap bm = BitmapFactory.decodeStream(is,null,options);
int Height = bm.getHeight();
int Width = bm.getWidth();
int newHeight = 300;
int newWidth = 300;
float scaleWidth = ((float) newWidth) / Width;
float scaleHeight = ((float) newHeight) / Height;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0,Width, Height, matrix, true);
image=toGrayscale(resizedBitmap);
imageView1 = (ImageView) findViewById(R.id.imgView1);
imageView1.setImageBitmap(image);
}
catch(Exception e)
{
}
pixels = new byte[image.getWidth()*image.getHeight()];
pixels2 = new int[image.getWidth()*image.getHeight()];
int k=0;
for (int i = 0; i < image.getHeight(); i++)
{
for (int j = 0; j < image.getWidth(); j++)
{
pixels[k]=(byte)(image.getPixel(j, i));
pixels2[k]=unsignedToBytes(pixels[k]);
k++;
}
}
}
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==RESULT\u LOAD\u IMAGE&&resultCode==RESULT\u OK&&null!=数据){
Uri selectedImage=data.getData();
字符串[]filePathColumn={MediaStore.Images.Media.DATA};
Cursor Cursor=getContentResolver().query(selectedImage,
filePathColumn,null,null,null);
cursor.moveToFirst();
int columnIndex=cursor.getColumnIndex(filePathColumn[0]);
String picturePath=cursor.getString(columnIndex);
cursor.close();
imageView=(imageView)findViewById(R.id.imgView);
setImageBitmap(BitmapFactory.decodeFile(picturePath));
BitmapFactory.Options=new-BitmapFactory.Options();
尝试
{
InputStream is=getContentResolver().openInputStream(SelecteImage);
位图bm=BitmapFactory.decodeStream(is,null,options);
int Height=bm.getHeight();
int Width=bm.getWidth();
int newHeight=300;
int newWidth=300;
浮动比例宽度=((浮动)新宽度)/宽度;
浮动刻度高度=((浮动)新高度)/高度;
矩阵=新矩阵();
矩阵。后标度(标度宽度、标度高度);
Bitmap resizedBitmap=Bitmap.createBitmap(bm,0,0,宽度,高度,矩阵,true);
图像=toGrayscale(调整大小的位图);
imageView1=(ImageView)findViewById(R.id.imgView1);
imageView1.setImageBitmap(图像);
}
捕获(例外e)
{
}
像素=新字节[image.getWidth()*image.getHeight()];
pixels2=newint[image.getWidth()*image.getHeight()];
int k=0;
对于(int i=0;i
请再显示一点代码好吗?位图“image”和整数“m”的初始化位置在哪里?出现了一些错误吗?谢谢,现在我添加了额外的代码,从gallery加载了图像。m与public在同一类中初始化…如果调用:bitmap bw=toGrayscale(彩色);您的bw位图不应包含所有的零像素,为什么使用图形缓存?您可以调用imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));setImageBitmap的参数是位图,那么您为什么需要图形缓存???