2017-10-09 70 views
0

我想從使用vectordrawable資源的imageview中獲取位圖,該資源在X或Y軸上旋轉,但位圖質量不佳。沒有旋轉或「setRotation」的質量是好的,但是當我使用「setRotationX」或「setRotationY」或Camera旋轉時,位圖質量下降。這個問題只是當我設置「setImageResource」爲一個vectordrawable,JPEG或PNG圖像沒有這個問題。我認爲這是對vectordrawable一個bug ......使用vectordrawable資源從imageview獲取位圖

這是我的代碼得到一個位圖:

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

回答

0

如果你想從一個ImageView的得到一個位圖,該位圖的質量更可能會退化。如果圖像旋轉,則位圖需要縮小時質量會更差。

你可以試試下面的事情:

  • 直接轉化載體資源爲位圖,並使用矩陣或一些庫旋轉。或者,
  • 關閉硬件加速。或者,
  • 使用imageView.setDrawingCacheEnabled(false);其次Bitmap bitmap = imageView.getDrawingCache();
+0

轉換爲位圖並不能幫助我,因爲我需要調整imageview的大小和向量不會失去它的質量,如果我想使用位圖,我沒有使用向量!我之前測試過硬件加速並且沒有影響,所以imageView.draw(canvas)的位圖質量比getDrawingCache()好,因此我使用imageView.draw(canvas) – XDelta

0

PL參考KC Ochibili的答案問題在以下地址:

How to Get Pixel Colour in Android?

我使用我的VectorDrawable喜歡(我已經表明相同下面)。我給出的代碼細節就像一個旁白,因爲我從我的手機發布這個,並且存在縮進問題,這是系統在stackoverflow中不接受的縮進問題。

首先附加一個偵聽像 myImageView.setOnTouchListener(新View.OnTouchListener(){ 然後重寫下列方法ImageView的:從接收到的視圖參數 公共布爾onTouch(查看圖,MotionEvent motionEvent){ 然後採取IageView ImageView的IMG =(ImageView的)視圖; 然後在圖像視圖執行以下操作: Img.setDrawingCacheEnablef(真); 然後取位圖從 位圖imgbmp = Bitmap.createBitmap(img.getDrawingCache()); 立即setDrawingCacheEnabled(false)on img。

你有位圖。

+0

imageView.draw(canvas)的位圖質量好於getDrawingCache()出於這個原因我使用imageView.draw(canvas) – XDelta