[英]Create UiImage from NSData
下面是我复制的代码(来自这个网站)并且只是稍微修改,因为原始代码无法编译。 我想操纵字节数组进行边缘检测并最终简单地改变颜色,但首先我想让基本代码工作。 目前,系统编译并运行。 它在屏幕上显示一幅画得很厉害的大象。 当我触摸图像时,它会消失。 单步执行将imageWithData的结果显示为0x0。 我用png和bmp尝试了同样的结果
我做错了什么线索?!
ImageViewDrawable定义为:
@interface ImageViewDrawable : UIImageView
// I am using the following code to initialize this ImageView
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ];
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// get and work on pixel data
NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage));
char* bytes =[pixelData bytes];
// Take away the red pixel, assuming 32-bit RGBA
for(int i = 0; i < [pixelData length]; i += 4) {
bytes[i] = bytes[i]; // red
bytes[i+1] = bytes[i+1]; // green
bytes[i+2] = bytes[i+2]; // blue
bytes[i+3] = bytes[i+3]; // alpha
}
// convert pixel back to uiiimage
NSData* newPixelData = [NSData dataWithBytes:bytes length:[pixelData length]];
char * bytes2 =[pixelData bytes];
UIImage * newImage = [UIImage imageWithData:newPixelData] ;
[self setImage: newImage ];
}
imageWithData:不接受任意数据并将其解释为RGBA未压缩纹理。 它需要包含已识别图像格式(如JPG,PNG或TIFF)的字节的数据,解析thoses并适当地解压缩图像。
为了做你想做的事,你需要创建一个适当配置的CGContext(行字节,像素格式等),或者使用你已经分配作为其后备存储的内存,或者通过询问它的存储然后复制你的字节进入它。 完成后,您可以使用所有与CGContext相关的功能,包括从该上下文创建UIImage的功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.