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

android– 多次旋转图像但保持角对齐,第1张

概述我尝试使用以下代码旋转图像,但我发现生成的图像越来越大:Matrixmatrix=newMatrix();matrix.setRotate(10);BitmapnewImage=Bitmap.createBitmap(image,0,0,image.getWidth(),image.getHeight(),matrix,true);你可以看到图片:原版的旋转10度再次旋转1

我尝试使用以下代码旋转图像,但我发现生成的图像越来越大:

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

你可以看到图片:

原版的

旋转10度

再次旋转10度

再次旋转10度

蓝色矩形是完整图像.

您可以看到图像越来越大(虽然沙发的大小没有改变),原始图像的4个角落后来不在新图像的边界上.

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

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

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

@H_403_28@解决方法:

我尝试了你的代码,经过一些轮换后,它崩溃了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 – 多次旋转图像但保持角对齐全部内容,希望文章能够帮你解决android – 多次旋转图像但保持角对齐所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存