NSi的UIimage返回Null

时间:2016-01-26 01:45:20

标签: ios email uiimage clipboard nsdata

我创建了一个QR码图像并将其显示在UIImageView

NSString *QRMessage = @"MESSAGE";

NSData *data = [QRMessage dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:false];
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setValue:data forKey:@"inputMessage"];
[filter setValue:@"Q" forKey:@"inputCorrectionLevel"];

imageQRCode = filter.outputImage; // imageQRCode is CIImage
ivQR.image = [UIImage imageWithCIImage: imageQRCode]; // ivQR is UIImageView

我试图保存图像,以便用户以某种方式将QR码发送给其他人。我首先尝试将其保存到"剪贴板"像这样...

UIPasteboard *pasteBoard = [UIPasteboard pasteboardWithName:UIPasteboardNameGeneral create:NO];
[pasteBoard setPersistent:true];
[pasteBoard setImage:ivQR.image];

...但似乎没有任何内容保存在剪贴板中。

然后我尝试将UIImage转换为NSData并将其添加为附件,如下所示:

MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
UIImage *imageToSend = [UIImage imageWithCIImage:imageQRCode];
NSData *data = UIImageJPEGRepresentation(imageToSend,1);
[picker addAttachmentData:data  mimeType:@"image/jpeg" fileName:@"QR.jpg"];

但似乎没有任何附件。

我做了一些测试,似乎NSData我从" UIImageJPEGRepresentation()"给了我" Null"数据。实际上图像显示在我的手机上,所以我想知道我是否只是错误地转换数据?

我的大多数"谷歌搜索"告诉我,我转换的方式是正确的。但是大多数示例在用户的手机上使用了图片,或者在应用程序本身中添加了图片。我的照片是"已创建" ...这样做会有所作为吗?

我的目标是允许用户复制到剪贴板,或添加为QR图像的附件。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

CIImage转换为UIImage时,我发现imageWithCIImage通常无效。我通常使用CIContext方法createCGImage,然后从中创建UIImage

CIImage *ciImage     = ...
CIContext *context   = [CIContext contextWithOptions:nil];
CGImageRef cgImage   = [context createCGImage:ciImage fromRect:rect];
UIImage *image       = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

请参阅Core Image Programming Guide中的示例。