UIimage 到 NSData returns Null
UIimage to NSData returns Null
我创建了一个二维码图像并将其显示在 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
我正在尝试保存图像,以便用户可以通过某种方式将二维码发送给其他人。我首先尝试像这样将它保存到 "Clipboard"...
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"];
但似乎又没有附加任何内容。
我做了一些测试,我从 "UIImageJPEGRepresentation()" 返回的 NSData 似乎给了我 "Null" 数据。该图像确实显示在我的 phone 上,所以我想知道我是否只是将数据转换错了?
我的大部分 "googling" 告诉我我转换的方式是正确的。但大多数示例使用用户 phone 上的图片,或添加到 App 本身的图片。我的照片是 "created"...那有什么不同吗?
我的目标是允许用户复制到剪贴板,或添加为 QR 图像的附件。非常感谢任何帮助。
将 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 中的示例。
我创建了一个二维码图像并将其显示在 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
我正在尝试保存图像,以便用户可以通过某种方式将二维码发送给其他人。我首先尝试像这样将它保存到 "Clipboard"...
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"];
但似乎又没有附加任何内容。
我做了一些测试,我从 "UIImageJPEGRepresentation()" 返回的 NSData 似乎给了我 "Null" 数据。该图像确实显示在我的 phone 上,所以我想知道我是否只是将数据转换错了?
我的大部分 "googling" 告诉我我转换的方式是正确的。但大多数示例使用用户 phone 上的图片,或添加到 App 本身的图片。我的照片是 "created"...那有什么不同吗?
我的目标是允许用户复制到剪贴板,或添加为 QR 图像的附件。非常感谢任何帮助。
将 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 中的示例。