旋转后图像变质

Posted

技术标签:

【中文标题】旋转后图像变质【英文标题】:Images get spoiled after rotation 【发布时间】:2011-06-16 11:57:41 【问题描述】:

我有一个 UIYableView 并将图像保存在该 tableview 中,每次旋转手机时我都会更改 UIImageView 大小。我检查 tableView:cell:forIndexpath 中的 self.interfaceOrientation 并决定给 imageview 的大小。每次发生旋转时,我都会重新加载 tableview。但是在旋转之后,图像似乎变得混杂了。我的意思是我在另一个图像上获得了图像的一部分。解决此问题的最佳方法是什么?

编辑:添加了一些代码

在 tableview:cell:forIndexPath 方法中,我执行以下操作:

...............
NSUIinteger row=indexPath.row;
UIImageView *imageView=[[UIIMage alloc]initWithImage:[images ojectAtIndex:row]];
if(self.interfaceOrientation==UIInterfaceOrientationPortrait)
 imageView.Frame.Size=CGSizeMake(320.0,460.0);    
else
 imageView.Frame.Size=CGSizeMake(480.0,300.0);
imageView.contentMode=UIContentModeAspectFit;
[cell.contentView addSubView:imageView];

在tableview:height:forIndexPath 方法中:

double height;
if(self.interfaceOrientation==UIInterfaceOrientationPortrait)
 height=460;    
else
 height=300;  
return height;

我以同样的方式返回行的宽度。

【问题讨论】:

你需要展示一些代码让我们了解你在做什么。 【参考方案1】:

首先,您是否在后台线程上进行任何绘图 (UIKit) 调用?这是这种绘图损坏的最常见原因。

接下来,你为什么在轮换后做reloadData?如果您只是调整大小,那应该没有必要。这些是什么类型的图像?自动调整大小通常会满足您的需求,如果没有,您可以重新布局单元格而不需要重新加载它们。

我强烈怀疑这里有后台操作,但如果不是,那么我会怀疑您的 cellForIndexPath: 在旋转后没有返回有效单元格,这可能是您如何设置 imageView 的问题。

【讨论】:

我不使用任何绘图。我重新加载数据以再次执行 cell:forIndexpath 方法,因为我每次都更改图像视图的大小。 你在与 UIKit 相关的后台线程上做任何事情吗?添加或删除视图,弄乱 UIImageViews 等。这不仅仅是 drawRect: 这不是线程安全的。 我关于更改图像大小的观点是,您不必为此生成全新的单元格。您的单元格可以自行调整大小。自动调整大小通常很好,但您也可以在 UITableViewCell 中使用layoutSubviews 重新排列自身。请参阅此问题进行讨论:***.com/questions/5822946/…

以上是关于旋转后图像变质的主要内容,如果未能解决你的问题,请参考以下文章

为啥Android Studio在选择图像后改变图像旋转

matlab中图像旋转

旋转后recyclerview行中的图像消失

关于图像旋转以及旋转后对应像素的位置

编码为旋转 90 度的 base64 图像后

图像旋转的原理