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

问题描述 投票:0回答:2

我尝试了这段代码,这里将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++]));

            }
        });



    }
java android image get pixels
2个回答
0
投票

Bitmap.Config.RGB_565改为Bitmap.Config.ARGB_8888


0
投票
 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++;
                }
            }
}
© www.soinside.com 2019 - 2024. All rights reserved.