我基本上需要在ImageView
(例如)
在上图中,我想旋转4以便正确显示。只有4,其余应保持垂直。
我有办法实现吗?
通过实施MikeM建议的方法。我得到了以下结果。
正如您所看到的,我需要解决两件大事:
4
答案 0 :(得分:2)
如果您知道或可以计算出您想要旋转的区域的坐标和尺寸,那么这个过程相对简单。
Bitmap
。Bitmap
所需区域。Canvas
上创建Bitmap
。在以下示例中,假设区域的坐标(x
,y
)和尺寸(width
,height
)已知。
// Options necessary to create a mutable Bitmap from the decode
BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
// Load the Bitmap, here from a resource drawable
Bitmap bmp = BitmapFactory.decodeResource(getResources(), resId, options);
// Create a Matrix for 90° counterclockwise rotation
Matrix matrix = new Matrix();
matrix.postRotate(-90);
// Create a rotated Bitmap from the desired region of the original
Bitmap region = Bitmap.createBitmap(bmp, x, y, width, height, matrix, false);
// Create our Canvas on the original Bitmap
Canvas canvas = new Canvas(bmp);
// Create a Paint to clear the clipped region to transparent
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
// Clear the region
canvas.drawRect(x, y, x + width, y + height, paint);
// Draw the rotated Bitmap back to the original,
// concentric with the region's original coordinates
canvas.drawBitmap(region, x + width / 2f - height / 2f, y + height / 2f - width / 2f, null);
// Cleanup the secondary Bitmap
region.recycle();
// The resulting image is in bmp
imageView.setImageBitmap(bmp);
解决编辑中的问题:
原始示例中的旋转区域图形基于长轴垂直的图像。在区域被修改后,编辑中的图像已旋转为垂直。
黑色背景是由于将生成的图像插入MediaStore
,后者以JPEG格式保存图像,不支持透明度。