1

请检查此代码并帮助我,,,

CGImageRef cRef = CGImageRetain(im.CGImage);

NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(cRef));

// return pointer to data
unsigned char* pixelBytes = (unsigned char *)[pixelData bytes];

// step through char data
for(int k = 0; k < [pixelData length]; k += 4) {
  // change accordingly
  pixelBytes[k] = pixelBytes[k];
  pixelBytes[k+1] = pixelBytes[k+1];
  pixelBytes[k+2] = pixelBytes[k+2];
  pixelBytes[k+3] = 255;
}

NSData* newPixelData = [NSData dataWithBytes:pixelBytes length:[pixelData length]];
CFDataRef imgData = (CFDataRef)pixelData;
CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(imgData);
CGImageRef throughCGImage = CGImageCreateWithPNGDataProvider(imgDataProvider, NULL, YES, kCGRenderingIntentDefault);

UIImage* newImage = [UIImage imageWithCGImage:throughCGImage];
NSLog(@"newImage: %@", newImage);

一些数据即将到来,但它没有被添加到 UIImageView..它显示为空白。

4

1 回答 1

1

问题 0)

您正在改变不可变数据,这应该是未定义的行为。

问题 1)

无论如何,PNG 是一种真正的文件格式,而不是具有固定样本格式的位图 blob。PNG 可以以多种方式表示图像——您的程序只是覆盖了好的数据。

于 2012-08-16T11:03:09.670 回答