vImageHistogramCalculation
現在のアプリケーションで画像のヒストグラムを計算するために使用しましたが、場合によっては EXC_BAD_ACCESS を取得しています。次のようなケースを経験しました-
- (void)histogramForImage:(UIImage *)image {
vImage_Buffer inBuffer;
CGImageRef img = image.CGImage;
CGDataProviderRef inProvider = CGImageGetDataProvider(img);
CFDataRef inBitmapData = CGDataProviderCopyData(inProvider);
inBuffer.width = CGImageGetWidth(img);
inBuffer.height = CGImageGetHeight(img);
inBuffer.rowBytes = CGImageGetBytesPerRow(img);
inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData);
vImagePixelCount histogram[4][8] = {{0}};
vImagePixelCount *histogramPointers[4] = { &histogram[0][0], &histogram[1][0], &histogram[2][0], &histogram[3][0] };
vImage_Error error = vImageHistogramCalculation_ARGBFFFF(&inBuffer, histogramPointers, 8, 0, 255, kvImageNoFlags);
if (error) {
NSLog(@"error %ld", error);
}
CGDataProviderRelease(inProvider);
}
iPhoneカメラロールの画像をPNG形式で使用し、上記のコードで手動でバンドルに入れたところ、正常に動作しました。
iPhone Camera Roll のJPG形式の画像に同じコードを使用すると、EXC_BAD_ACCESS エラーが発生します。
Photos Frameworkを使用して Camera Roll から画像を取得しようとした後、同じコードに渡したところ、EXC_BAD_ACCESS エラーが発生しました。
実際に必要なのは、iPhone Camera Rollのすべての画像のヒストグラムを見つけることです。そのため、上記のコードがある画像形式では正常に機能し、他の画像形式では失敗する理由を見つけることができません。クラッシュの他の理由はありますか?
EDIT 1-画像形式についてではなく、一部のJPG画像でも正常に機能するようになりましたが、場合によってはクラッシュすることもあります.どうすればそれを理解できますか?
参考: