如何使用指定方法从ImageView获取来自相机的未指定Drawable图像?
从加载了相机图片的ImageView中获取Bitmap
嘿,我懂你的困扰——你没法用示例里那种BitmapFactory.decodeResource()的方式拿到ImageView里的图,毕竟相机拍摄的图片不是预先定义在R.drawable里的资源嘛。别担心,咱们直接从ImageView本身提取Bitmap就可以,分两种常见情况给你讲:
情况1:ImageView直接设置的是Bitmap或常规BitmapDrawable
这种情况最简单,直接从ImageView的Drawable里提取就行:
// 先拿到你的ImageView实例 ImageView cameraImageView = findViewById(R.id.your_camera_image_view); Drawable drawable = cameraImageView.getDrawable(); if (drawable != null && drawable instanceof BitmapDrawable) { Bitmap capturedBitmap = ((BitmapDrawable) drawable).getBitmap(); // 这里就拿到相机对应的Bitmap了,接下来随便用~ }
情况2:用图片加载库(比如Glide/Picasso)加载的相机图片
如果是用第三方库加载的相机图片,有时候会遇到过渡Drawable或者自定义Drawable的情况,咱们可以做一层兼容处理:
ImageView cameraImageView = findViewById(R.id.your_camera_image_view); Bitmap capturedBitmap = null; Drawable drawable = cameraImageView.getDrawable(); if (drawable != null) { if (drawable instanceof BitmapDrawable) { capturedBitmap = ((BitmapDrawable) drawable).getBitmap(); } else if (drawable instanceof TransitionDrawable) { // 处理Glide等库可能用到的过渡动画Drawable,取最后一层的实际Bitmap TransitionDrawable transitionDrawable = (TransitionDrawable) drawable; Drawable finalLayer = transitionDrawable.getDrawable(transitionDrawable.getNumberOfLayers() - 1); if (finalLayer instanceof BitmapDrawable) { capturedBitmap = ((BitmapDrawable) finalLayer).getBitmap(); } } } // 拿到Bitmap后就可以进行后续操作啦
小提示
一定要确保在ImageView已经完成图片加载之后再调用这些代码哦!比如相机拍照完成并把图片设置到ImageView之后,再去提取Bitmap,不然getDrawable()可能会返回null,导致拿不到图片。
内容的提问来源于stack exchange,提问作者Jay jay
相关产品推荐
相关产品推荐

