Java 如何在android中从位图中获取正像素值

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

我尝试了这段代码,在这里将imageView转换为位图图像,然后将其转换为灰度。但是我们想访问像素值,但是我们得到的所有像素值都是0。请有人帮助我们

 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的参数是位图,那么您为什么需要图形缓存???