我有一些调整图像大小的代码,所以我可以获得图像中心的缩放块 - 我使用它来获取UIImage并返回图像的小方形表示,类似于在专辑视图中看到的照片应用程序.(我知道我可以使用a UIImageView并调整裁剪模式以获得相同的结果,但这些图像有时会显示在中UIWebViews).
我已经开始注意到这段代码中的一些崩溃,我有点难过.我有两种不同的理论,我想知道是否有基础.
理论1)我通过绘制到目标大小的屏幕外图像上下文来实现裁剪.由于我想要图像的中心部分,我设置CGRect传递给的参数drawInRect大于我的图像上下文边界的东西.我希望这是犹太洁食,但我是否试图汲取我不应该触及的其他记忆?
理论2)我在后台线程中做了所有这些.我知道UIKit的部分内容仅限于主线程.我假设/希望绘制到屏幕外的视图不是其中之一.我错了吗?
(哦,我多么想念NSImage's drawInRect:fromRect:operation:fraction:方法.)
cocoa-touch image-manipulation objective-c uiimagepickercontroller ios
我想在我的项目中为所有UIImageViews添加一些圆角.我已经有了代码工作,但我必须将它应用于每个图像; 我应该继承UIImageView来添加它吗?如果是这样,有人可以给我一些指示如何做到这一点?
这是代码
- (void)viewDidLoad {
[super viewDidLoad];
NSString *mainpath = [[NSBundle mainBundle] bundlePath];
welcomeImageView.image = [UIImage imageWithContentsOfFile:[mainpath stringByAppendingString:@"/test.png"]];
welcomeImageView.layer.cornerRadius = 9.0;
welcomeImageView.layer.masksToBounds = YES;
welcomeImageView.layer.borderColor = [UIColor blackColor].CGColor;
welcomeImageView.layer.borderWidth = 3.0;
CGRect frame = welcomeImageView.frame;
frame.size.width = 100;
frame.size.height = 100;
welcomeImageView.frame = frame;
}
Run Code Online (Sandbox Code Playgroud) 我尝试在UIImage上得到圆角,到目前为止我读到的,最简单的方法是使用蒙版图像.为此我使用了TheElements iPhone Example中的代码和我找到的一些图像大小调整代码.我的问题是resizedImage总是为nil而且我没有找到错误...
- (UIImage *)imageByScalingProportionallyToSize:(CGSize)targetSize
{
CGSize imageSize = [self size];
float width = imageSize.width;
float height = imageSize.height;
// scaleFactor will be the fraction that we'll
// use to adjust the size. For example, if we shrink
// an image by half, scaleFactor will be 0.5. the
// scaledWidth and scaledHeight will be the original,
// multiplied by the scaleFactor.
//
// IMPORTANT: the "targetHeight" is the size of the space
// we're drawing into. The "scaledHeight" is …Run Code Online (Sandbox Code Playgroud) 我正在屏幕上绘制一个CGContext创建的使用CGBitmapContextCreate,然后CGImage从中生成一个CGBitmapContextCreateImage并将其绘制到我的视图中drawRect(我还在绘制其他一些东西 - 这是一种隔离不同级别的可变性和复杂性的练习).
当它全部在主线程上运行时,一切正常.然而,通过这种方式将其拆分的动机之一就是使得屏幕外部分可以在后台线程上运行(我认为它应该没问题,因为它不会渲染到屏幕上下文).
但是,当我这样做时,生成的图像是空的!我检查了代码,并放置了明智的NSLog来验证一切都按正确的顺序发生.
我的下一步是将其归结为最简单的代码,以重现问题(或者找到一些我遗漏的傻事并修复它) - 此时我会在必要时在此处发布一些代码.但我首先要在这里检查一下,我不会走错路.我在googlesphere周围的旅行中找不到任何可以解决问题的东西 - 但是朋友确实提到他在尝试在后台线程中调整图像大小时遇到了类似的问题 - 这表明这里可能存在一些普遍的限制.
[编辑]
感谢到目前为止的回复.如果没有别的,他们告诉我,至少我并不是唯一一个没有答案的人 - 这是我想要找到的一部分.在这一点上,我将把额外的工作放在获得最简单的可能示例上,并且可能会返回一些代码或更多信息.在此期间保持任何想法:-)
提出一点:有几个人在API方面使用了术语线程安全.应该注意的是,在这种情况下有两种类型的线程安全:
我怀疑到目前为止提到的是第一种类型,但如果你能澄清,我将不胜感激.
[edit2 - 解决了!]
好的,我把它全部搞定了.执行摘要是问题出在我身上,而不是位图上下文本身.
在我的后台线程中,就在我进入位图上下文之前,我正在对其他一些对象做一些准备.事实证明,间接地调用那些导致在某些视图上调用setNeedsDisplay的其他对象!通过将完成该部分的部分分离到主线程,它现在完全可以正常工作.
所以对于那些遇到这个问题的人来说,想知道他们是否可以在后台线程上绘制位图上下文,答案就是你可以(在这里和答案中提出的警告).
谢谢大家
cocoa-touch ×2
ios ×2
iphone ×2
buffering ×1
cocoa ×1
code-reuse ×1
objective-c ×1
subclass ×1