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 に答える