2016-07-01 44 views
0

后,我有ImageView一个Bitmap,而ScaleTypeFitXY,当我得到BitmapImageview的:获取的ImageView的位图缩放

Bitmap currentBitmap = ((BitmapDrawable) context.getDrawable()).getBitmap(); 

返回的是原始Image与原Width/HeightScaled Size,怎么可能让ScaledBitmap不是原来的?

回答

0

那么,缩放效果实际上应用在画布级别。所以,你可以做的是获得当前的Canvas增强,然后用你的位图绘制一个新的改变,但是,你将不得不重写ImageView类来展示支持Canvas的Matrix。

public class ExposedImageView extends ImageView { 
    protected Matrix matrix = new Matrix(); 

    ... // constructors 

    @Override 
    public void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 

     canvas.getMatrix(matrix); 
    } 

    public Matrix getCanvasMatrix(){ 
     return matrix; 
    } 
} 

然后你就可以用类似得到调整的映像:

public static Bitmap getRealImage(ExposedImageView view) throws Throwable { // OutOfMemoryError, etc. 
    Bitmap original = ((BitmapDrawable) context.getDrawable()) 
     .getBitmap(); 

    Bitmap adjusted = Bitmap.createBitmap(original.getWidth(), 
     original.getHeight(), 
     original.getConfig()); 

    Canvas canvas = new Canvas(adjusted); 
    canvas.setMatrix(view.getCanvasMatrix()); 
    canvas.drawBitmap(original, 0, 0, null); 

    return adjusted; 
} 
+0

感谢您的回答,但'canvas.getMatrix(矩阵);'已过时,我尝试使用'getMatrix( )'ExposedImageView',但它不起作用!,有什么建议吗? – Abanoub

+0

经过深入挖掘,我想知道View.getMatrix()与您的请求不符的原因可能与https://code.google.com/p/android/issues/detail有关吗? ID = 24517 – Guardanis