gpt4 book ai didi

android - 多次旋转图像但保持角对齐

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:56 24 4
gpt4 key购买 nike

我尝试用下面的代码旋转一张图片,但是我发现生成的图片越来越大:

Matrix matrix = new Matrix();
matrix.setRotate(10);
Bitmap newImage = Bitmap.createBitmap(image, 0, 0,
image.getWidth(), image.getHeight(), matrix, true);

可以看到图片:

原创

enter image description here

旋转 10 度

enter image description here

再次旋转10度

enter image description here

再次旋转10度

enter image description here

蓝色矩形是完整图像。

可以看到图片越来越大(虽然沙发的尺寸没变),而且原图的4个角不在后面新图的边界上。

如何更改代码以保持边框上的角(就像第二张图片一样)?

我忘了说我已经在 github 上创建了一个演示项目。你可以克隆它,主要的java代码在这里:

https://github.com/freewind/Android-RotateTest/blob/master/src/com/example/MyActivity.java

最佳答案

我尝试了您的代码,经过一些旋转后它因 OutOfMemory 异常而崩溃,原因是每次创建新位图时都会占用大量资源。你永远不应该!在迭代中使用 createBitMap()。我对您的图像旋转代码做了一些修改,现在它按预期运行。
这是代码:

private void addListeners() {
this.button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {

Matrix matrix = new Matrix();

//copying the image matrix(source) to this matrix
matrix.set(imageView.getImageMatrix());

matrix.postRotate(10, imageView.getWidth()/2, imageView.getHeight()/2);
imageView.setImageMatrix(matrix);

//checking the size of the image
Drawable d = imageView.getDrawable();
Bitmap bmp = ((BitmapDrawable)d).getBitmap();
imageInfo(bmp);
}
});
}

同时设置 imageView 的缩放类型为矩阵

<ImageView
android:id="@+id/Image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#336699"
android:scaleType="matrix"
android:padding="2px"
android:src="@drawable/m" />

如果我们想从 ImageView 中获取旋转后的位图,请执行以下操作:

private Bitmap getBitmapFromView() {
// this is the important code :)
// Without it the view will have a dimension of 0,0 and the bitmap will be null
imageView.setDrawingCacheEnabled(true);
imageView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
imageView.layout(0, 0, imageView.getMeasuredWidth(), imageView.getMeasuredHeight());
imageView.buildDrawingCache(true);
Bitmap b = Bitmap.createBitmap(imageView.getDrawingCache());
imageView.setDrawingCacheEnabled(false); // clear drawing cache
return b;
}

希望对您有所帮助。

关于android - 多次旋转图像但保持角对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com