【问题标题】:Android bitmap rotate canvas crops/cuts imageAndroid 位图旋转画布裁剪/剪切图像
【发布时间】:2013-04-05 05:22:36
【问题描述】:
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);

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

我的问题是,在旋转这个“箭头”时,它似乎“剪掉”了远边缘的一部分,就好像它保持了原始位图的尺寸一样。我不知道如何让它“溢出”并呈现正确大小的图像。

有没有办法做到这一点?

【问题讨论】:

    标签: android bitmap rotation crop


    【解决方案1】:

    您将图像旋转 45 度,因此生成的位图应该是原始宽度加上原始对角线宽度(毕达哥拉斯定理应该能够提供帮助)。

    AFAIK 您需要在创建结果位图时自己进行数学运算,因为这是正在绘制的画布,旋转它的内容不会旋转容器。

    【讨论】:

      【解决方案2】:

      尝试将您的 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 回答。信用到期!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 2015-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-10
        • 1970-01-01
        相关资源
        最近更新 更多