1

CGImageRef を JPEG2000 として保存する方法を見つけようとしています。

現時点では、散らばったような画像出力が得られます。

kUTTypeJPEG2000 を除く他のすべての形式で機能する次のコードがあります。kUTTypeGIF または kUTTypePNG として保存すると問題なく動作します。興味深いことに、アルファチャンネルなしで kUTTypeJPEG2000 として保存することもできます。

画像を正しく出力するにはどうすればよいですか?

- (void)saveImage:(CGImageRef)image path:(NSString *)path
{
    // Set the image compression quality
    CFMutableDictionaryRef properties = CFDictionaryCreateMutable(nil,
                                                                  0,
                                                                  &kCFTypeDictionaryKeyCallBacks,
                                                                  &kCFTypeDictionaryValueCallBacks);

    // Save and finalize
    CFURLRef url = CFBridgingRetain([[NSURL alloc] initFileURLWithPath:path]);

    CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG2000, 1, NULL);
    CGImageDestinationAddImage(destination, image, properties);
    CGImageDestinationFinalize(destination);

    CFRelease(url);
}
4

1 に答える 1

0

修理済み。

ソース画像の場合、行ごとのデフォルトのバイト数でコンテキストを作成するように設定する代わりに、CGImageGetBytesPerRow(image)を指定する必要があり4 * widthました。

size_t width = CGImageGetWidth(image);
size_t height = CGImageGetHeight(image);
size_t bytesPerRow = 4 * width;

CGContextRef context = CGBitmapContextCreate(NULL,
                                             width,
                                             height,
                                             CGImageGetBitsPerComponent(image),
                                             bytesPerRow,
                                             CGImageGetColorSpace(image),
                                             CGImageGetAlphaInfo(image));
于 2013-07-09T21:21:08.590 に答える