Android位图旋转画布裁剪/剪切图像

时间:2013-04-12 15:36:11

标签: android bitmap rotation crop

bmpAndroidMarker = BitmapFactory.decodeResource(context.getResources(), R.drawable.t_move2);
                        bmpAndroidMarkerResult = Bitmap.createBitmap(bmpAndroidMarker.getWidth(), bmpAndroidMarker.getHeight(), Bitmap.Config.ARGB_8888);
                        Canvas tempCanvas = new Canvas(bmpAndroidMarkerResult);
                        tempCanvas.rotate(direction+45, bmpAndroidMarker.getWidth()/2, bmpAndroidMarker.getHeight()/2);
                        tempCanvas.drawBitmap(bmpAndroidMarker, 0, 0, null);

这是我编写的代码(借用)。该图标是在列表视图内的图像视图中生成的。

我的问题是,在旋转这个'箭头'时,似乎它'剪辑'远边的一部分,好像它保持了原始位图的尺寸。我无法弄清楚如何让它“溢出”并渲染正确尺寸的图像。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:2)

你正在将图像旋转45度,因此结果位图应该是原始宽度加上原始对角线宽度(毕达哥拉斯定理应该能够帮助)。

AFAIK你需要在创建结果Bitmap时自己做数学,因为它是正在绘制的画布,旋转它的内容不会旋转容器。

答案 1 :(得分:0)

尝试将ImageView包装在FrameLayout中,并将框架布局的宽度和高度设置为您尝试渲染的图像的大小。您可以在视图的布局文件中执行此操作,如...

<FrameLayout
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_width="YOUR IMAGE WIDTH"
        android:layout_height="YOUR IMAGE HEIGHT">
        <ImageView
            android:scaleType="matrix"
            android:layout_width="YOUR IMAGE WIDTH"
            android:layout_height="YOUR IMAGE HEIGHT"
            android:src="@drawable/YOUR IMAGE FILE" />
    </FrameLayout>

...或者以编程方式构建具有指定尺寸的FrameLayout,然后将ImageView添加为子视图。

如果您的图片比屏幕大,您可以使用android:scaleType =“matrix”来防止缩放,并确保保留纵横比。

最初由Pavlo Viazovskyy here回答。信用到期的信用额度!