使用vectordrawable资源从imageview获取位图

时间:2017-10-09 23:39:31

标签: android bitmap rotation android-vectordrawable

我想从带有vectordrawable资源的imageview获取位图,该资源在X或Y轴上旋转,但位图的质量不好。没有旋转的质量或" setRotation"很好但是当我使用" setRotationX"或" setRotationY"或相机旋转,位图质量下降。这个问题就在我设置" setImageResource"对于vectordrawable,jpeg或png图像没有这个问题。我认为这是vectordrawable的错误...

这是我获取位图的代码:

itemBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(itemBitmap);
cv.save();
imageView.draw(canvas);
cv.restore();

2 个答案:

答案 0 :(得分:0)

如果您尝试从imageView获取位图,则位图的质量更有可能降低。如果图像被旋转,则由于位图需要缩小,因此质量会更低。

您可以尝试以下方法:

  • 将矢量资源直接转换为位图,并使用矩阵或某些库进行旋转。或者,
  • 关闭硬件加速。或者,
  • 使用imageView.setDrawingCacheEnabled(false);后跟Bitmap bitmap = imageView.getDrawingCache();

答案 1 :(得分:0)

Pl在以下地址参考kc Ochibili的问题答案:

How to Get Pixel Colour in Android?

我在我的VectorDrawable上使用相同的(我在下面显示的内容)。我正在给出代码细节,就像叙述一样,因为我是从我的手机发布的,并且存在缩进问题,系统在stackoverflow上不接受缩进。

首先将一个监听器附加到ImageView上 myImageView.setOnTouchListener(new View.OnTouchListener(){ 然后覆盖以下方法: 公共布尔值onTouch(视图视图,MotionEvent motionEvent){ 然后从视图参数接收到IageView ImageView img =(ImageView)视图; 然后在图像视图上执行以下操作: Img.setDrawingCacheEnablef(真); 然后从中获取位图 位图imgbmp = Bitmap.createBitmap(img.getDrawingCache()); 在img上立即setDrawingCacheEnabled(false)。

你有位图。

相关问题