我有一些调整图像大小的代码,所以我可以获得图像中心的缩放块 - 我使用它来获取UIImage并返回图像的小方形表示,类似于在专辑视图中看到的照片应用程序.(我知道我可以使用a UIImageView并调整裁剪模式以获得相同的结果,但这些图像有时会显示在中UIWebViews).
我已经开始注意到这段代码中的一些崩溃,我有点难过.我有两种不同的理论,我想知道是否有基础.
理论1)我通过绘制到目标大小的屏幕外图像上下文来实现裁剪.由于我想要图像的中心部分,我设置CGRect传递给的参数drawInRect大于我的图像上下文边界的东西.我希望这是犹太洁食,但我是否试图汲取我不应该触及的其他记忆?
理论2)我在后台线程中做了所有这些.我知道UIKit的部分内容仅限于主线程.我假设/希望绘制到屏幕外的视图不是其中之一.我错了吗?
(哦,我多么想念NSImage's drawInRect:fromRect:operation:fraction:方法.)
cocoa-touch image-manipulation objective-c uiimagepickercontroller ios
我正在研究Jigsaw类型的游戏,我有两个用于屏蔽的图像,我已经实现了这个代码用于屏蔽
- (UIImage*) maskImage:(UIImage *)image withMaskImage:(UIImage*)maskImage {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef maskImageRef = [maskImage CGImage];
CGContextRef mainViewContentContext = CGBitmapContextCreate (NULL, maskImage.size.width, maskImage.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
if (mainViewContentContext==NULL)
return NULL;
CGFloat ratio = 0;
ratio = maskImage.size.width/ image.size.width;
if(ratio * image.size.height < maskImage.size.height) {
ratio = maskImage.size.height/ image.size.height;
}
CGRect rect1 = {{0, 0}, {maskImage.size.width, maskImage.size.height}};
CGRect rect2 = {{-((image.size.width*ratio)-maskImage.size.width)/2,-((image.size.height*ratio)-maskImage.size.height)/2},{image.size.width*ratio, image.size.height*ratio}};
CGContextClipToMask(mainViewContentContext, rect1, maskImageRef);
CGContextDrawImage(mainViewContentContext, rect2, image.CGImage);
CGImageRef newImage = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);
UIImage *theImage = [UIImage imageWithCGImage:newImage];
CGImageRelease(newImage);
return …Run Code Online (Sandbox Code Playgroud) 我有掩盖图像的问题.我做游戏"拼图",并且必须制作自定义图像.我发现并尝试了两种自定义裁剪方式:
CALayer.mask财产.UIImage.mask财产.在第一个选项中,我创建自定义路径,然后将其分配给CAShapeLayer.path属性,然后分配CAShapeLayer给CALayer.mask属性.最后我有自定义裁剪图像.在第二个选项中我首先使用CGImageMaskCreate()方法(我使用之前创建的拼图的黑色蒙版图像),然后CGContextClipToMask().在任何一个选项中我都有性能问题(主要是当我将图像裁剪成16个谜题并在屏幕上拖动时).
是否有任何其他方法以自定义方式裁剪图像.(我不知道如何解决性能问题).提前致谢.
ios ×2
iphone ×2
calayer ×1
cashapelayer ×1
cocoa-touch ×1
objective-c ×1
puzzle ×1
transparency ×1
uiimage ×1