画像からバイトを取得し、いくつかの操作を行う iPhone アプリがあります。最後に、バイトが UIImage にコピーされます。3GS でテストしたところ、問題なく動作しました。クラッシュはありません。私の友人の何人かが 4S でテストすると、アドホックにクラッシュします。testflight を使用してクラッシュ レポートをキャプチャし、シンボリケートしました。これがクラッシュするコードです。4s から 3gs の同じイメージを使用しましたが、やはりクラッシュしませんでした。根本的な原因を見つけて修正する方法を知っている人はいますか?
UIImage を CGImageRef に変換すると、異なる幅と高さが返されることはありませんか??
-(UIImage *) CopyBytesToUIImage:(int*)img
:(int) width
:(int) height
{
//(int*)img was build by extracting bytes from OriginalSourceImage
CGImageRef inImage = OriginalSourceImage.CGImage;
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage));
UInt8 * m_OutPixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef);
int iStep,jStep;
for (int i = 0; i < height; i++)
{
iStep = i*width*4;
for (int j = 0; j < width; j++)
{
jStep = j*4;
m_OutPixelBuf[iStep + jStep ] = m_OutPixelBuf[iStep + jStep +1] = m_OutPixelBuf[iStep + jStep +2] = img.arr2D[i][j];
//Test flight shows that it crashes during this assignment.
}
}
CGContextRef ctx = CGBitmapContextCreate(m_OutPixelBuf,
CGImageGetWidth(inImage),
CGImageGetHeight(inImage),
CGImageGetBitsPerComponent(inImage),
CGImageGetBytesPerRow(inImage),
CGImageGetColorSpace(inImage), CGImageGetBitmapInfo(inImage)
);
CGImageRef imageRef = CGBitmapContextCreateImage(ctx);
CGContextRelease(ctx);
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CFRelease(m_DataRef);
m_OutPixelBuf = nil;
return finalImage;
}
ここにテストフライトデータがあります
1. 0 MyApp 0x000cf6ae testflight_backtrace + 238
2. 1 MyApp 0x000d0398 TFSignalHandler + 264
3. 2 libsystem_c.dylib 0x3a63de92 _sigtramp + 42
4. 3 MyApp 0x0009e328 -[clsEditor CopyBytesToUIImage:::] + 176
5. 4 MyApp 0x0009e1c4 -[clsEditor Sketch:] + 596
よろしくお願いします。