繁体   English   中英

如何在Android Studio中将图像视图转换为位图?

[英]how to covert image view into bitmap in android studio?

谁能告诉我如何将imageview转换为位图? 在我的应用程序中,我正在访问画廊并将图片的位图放入图像视图,然后使用毕加索,我正在调整太大而无法直接上传以进行解析的图像的大小。 我可以使用毕加索在图像视图中调整图像的大小,但是如何从图像视图中获取位图并上传以进行解析? 这是我的代码。

 public static final int IMAGE_GALLERY_REQUEST = 20;
    private ImageView imgPicture;
    public Bitmap image; 



 public void openGallery(View view){


    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);//
    startActivityForResult(Intent.createChooser(intent, "Select Picture"),IMAGE_GALLERY_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        // if we are here, everything processed successfully.
        if (requestCode == IMAGE_GALLERY_REQUEST) {

            Uri imageUri = data.getData();


            InputStream inputStream;


            try {
                inputStream = getContentResolver().openInputStream(imageUri);


                 image = BitmapFactory.decodeStream(inputStream);



                height= image.getHeight();
                h= String.valueOf(height);

                width= image.getWidth();
                w= String.valueOf(width);



               if (width>800 || height>600)
                {


                    Picasso.with(this)
                            .load(imageUri)
                            .resize(800,600)
                            .centerCrop()
                            .into(imgPicture);
                   // imgPicture.setImageBitmap(image);
                     //what should i write here to convert this imageview to bitmap? and then later use that bitmap to upload the image to parse?


                }
                else
                {
                    //do nothing
                    imgPicture.setImageBitmap(image);
                }


            } catch (FileNotFoundException e) {
                e.printStackTrace();
                // show a message to the user indictating that the image is unavailable.
                Toast.makeText(this, "Unable to open image", Toast.LENGTH_LONG).show();
            }

        }
    }
}

您只能从imageview生成位图,但不能生成真实图像大小,这会生成具有imageview大小的位图

Bitmap bitmap;
            try {
                bitmap = Bitmap.createBitmap(YOUR_VIEW.getWidth(), YOUR_VIEW.getHeight(),
                        Bitmap.Config.ARGB_8888);

                Canvas canvas = new Canvas(bitmap);
                YOUR_VIEW.draw(canvas);

                File root = Environment.getExternalStoragePublicDirectory(Environment.PICTURES);

                String fname = "NAME_OF_FILE.jpg";
                file = new File(root, fname);

                try {
                    if (!root.exists()) {
                    root.mkdir();
                }
                    FileOutputStream out = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.flush();
                    out.close();
                    YOUR_VIEW.destroyDrawingCache();

                } catch (Exception e) {
                    e.printStackTrace();
                }

            } catch (Exception e) {
            }

如果您不想保存到文件,请使用以下代码:

public static Bitmap getScreenViewBitmap(View v) {
    v.setDrawingCacheEnabled(true);

    // this is the important code :)
    // Without it the view will have a dimension of 0,0 and the bitmap will be null
    v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());

    v.buildDrawingCache(true);
    Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false); // clear drawing cache

    return b;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM