【问题标题】:get bitmap from visible zoomed image android从可见的缩放图像android获取位图
【发布时间】:2011-12-13 14:29:58
【问题描述】:

我有一个Imageview,它被缩放和旋转(我使用了multitouch zooming)。那么我如何才能获得仅可见内容的位图(我的意思是当我缩放image 时,位图的一部分可能会超出屏幕。所以,我想要的是屏幕上可见的bitmap) .那么api 中是否有任何内置功能可以从大位图创建小位图?或者是否有任何功能可以使用x,y 坐标裁剪图像?实际上我希望缩放或旋转的部分转到下一个activity

【问题讨论】:

    标签: android bitmap android-imageview


    【解决方案1】:

    如果您知道所有的比例和旋转值,您可以使用这些值创建一个Matrix,然后通过Bitmap.createBitmap() 方法将它们应用到您的位图。
    示例:

    Bitmap original = ((BitmapDrawable) yourImageView.getDrawable()).getBitmap();
    Matrix matrix = new Matrix();
    matrix.setRotate(degrees);
    matrix.postScale(scale, scale);
    Bitmap result = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true);
    

    一个更快但可能不是那么漂亮的解决方案是创建一个位图并将您当前可见的视图绘制到该位图上:

    Bitmap result = Bitmap.createBitmap(yourImageView.getWidth(), yourImageView.getHeight(), Bitmap.Config.RGB_565);
    Canvas c = new Canvas(result);
    yourImageView.draw(c);
    

    之后的结果应该完全包含您在屏幕上看到的内容。

    【讨论】:

    • 第二个解决方案非常棒,有效,+1!你第一个根本不适合我
    • 我可以添加的是使用更好的方法将drawable转换为位图 - public static Bitmap drawableToBitmap (Drawable drawable) { if (drawable instanceof BitmapDrawable) { return ((BitmapDrawable)drawable).getBitmap(); } 位图位图 = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);画布画布=新画布(位图); drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); drawable.draw(画布);返回位图; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 1970-01-01
    • 2014-12-26
    相关资源
    最近更新 更多