用UIImage模拟NSImage drawInRect:fromRect:operation:fraction

问题描述 投票:2回答:3

我真的需要使用UIImage来模仿NSImage的drawInRect:fromRect:operation:fraction的行为,我想知道什么是最好的方法,或者(更好),如果有人已经这样做并愿意共享代码。

我尝试使用CGImageCreateWithImageInRect进行此操作(请参阅最后的代码),但没有得到预期的结果。请注意,代码实际上是在Mac上测试的(到目前为止,我无法在iPhone上运行整个程序),因此从NSImage获取CGImage可能会有一些问题

- (void)drawInRect:(CGRect)rect fromRect:(CGRect)fromRect alpha:(float)alpha {
      CGContextRef context;
       CGImageRef originalImageRef;
       CGImageRef subimageRef;

#if ERMac
       context=[[NSGraphicsContext currentContext] graphicsPort];

       CGImageSourceRef source;

       source = CGImageSourceCreateWithData((CFDataRef)[self TIFFRepresentation], NULL);
       originalImageRef =  CGImageSourceCreateImageAtIndex(source, 0, NULL);
       CFRelease(source);
#else
       context=UIGraphicsGetCurrentContext();
       originalImageRef=CGImageRetain([self CGImage]);
#endif

       subimageRef = CGImageCreateWithImageInRect (originalImageRef, fromRect);


       CGContextDrawImage(context, rect, subimageRef);


       if (subimageRef)
           CGImageRelease(subimageRef);
       if (originalImageRef)
           CGImageRelease(originalImageRef);
 }
iphone macos uiimage porting nsimage
3个回答
2
投票

这是我的方法...


0
投票

UIImage具有drawInRect:blendMode:alpha:。提取UIImage的子矩形的一个简单技巧是将对象绘制到目标上下文中,该上下文是要提取的矩形的大小,将绘制图像的原点向上和向左调整,以使右侧部分落入目标上下文。


0
投票

NSImage类别方法示例以及我的iOS移植端口:

© www.soinside.com 2019 - 2024. All rights reserved.