目前通过MonoTouch进行iPhone开发的第一步,我正在使用我从照片库中读取的UIImage
。
我想要实现的是获取图像的原始字节数组(byte[]
)。
我知道MonoTouch中有UIImageJPEGRepresentation
和UIImagePNGRepresentation
个包装器。我也知道如何使用它们。我不知道的是:
如何决定调用这两个函数中的哪一个?
即。如果原始图像是JPEG图像,我不希望将其作为PNG而是作为JPEG,反之亦然。
有没有办法做到这一点,或者我错过了一些观点?
答案 0 :(得分:29)
获得UIImage
后,它可以使用UIImageJPEGRepresentation
或UIImagePNGRepresentation
生成JPEG或PNG。原始图像的格式仅在从其创建UIImage时很重要(决定加载它的CFImage
提供者)。
如果您的应用或算法对确保将其保存为原始格式很重要,我认为您必须在撰写时保留该信息。我仔细检查过,找不到任何宣传它来自哪种格式的东西。
您是要通过UIImageView
更改图片还是图片保持不变?如果它没有改变,你只需要UI来选择图像,你可以得到文件字节?例如,如果您只是选择显示图像,然后将它们上传到服务器或其他内容,UIImage
只能用于查看和选择,如果您的数据结构记住它来自哪个文件,您可以获得这些位退出磁盘并上传。如果您在视图中更改文件,那么您或用户需要决定图像的输出(以及jpeg的质量)。
答案 1 :(得分:0)
PREPARE
typedef NS_ENUM(NSInteger, DownloadImageType) {
DownloadImageTypePng,
DownloadImageTypeJpg
};
@property (assign, nonatomic) DownloadImageType imageType;
DETECT
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
NSString *compareString = [[info objectForKey:UIImagePickerControllerReferenceURL] absoluteString];
NSRange pngRange = [compareString rangeOfString:@"PNG" options:NSBackwardsSearch];
if (pngRange.location != NSNotFound) {
compareString = [compareString substringFromIndex:pngRange.location];
self.imageType = DownloadImageTypePng;
NSLog(@"%@", compareString);
} else {
NSLog(@"Not PNG");
}
NSRange jpgRange = [compareString rangeOfString:@"JPG" options:NSBackwardsSearch];
if (jpgRange.location != NSNotFound) {
compareString = [compareString substringFromIndex:jpgRange.location];
self.imageType = DownloadImageTypeJpg;
NSLog(@"%@", compareString);
} else {
NSLog(@"Not JPG");
}
}
使用
if (self.imageType == DownloadImageTypePng) {
} else if (self.imageType == DownloadImageTypeJpg) {
}