11

オブジェクトからプログレッシブjpegを作成しようとしていUIImageます。これは、私が作成したコードです。

NSMutableData *data = [NSMutableData data];

NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: @"Library/Caches/test.jpg"];

CFURLRef url = CFURLCreateWithString(NULL, (CFStringRef)[NSString stringWithFormat:@"file://%@", path], NULL);
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypeJPEG, 1, NULL);
CFRelease(url);

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                (__bridge id)kCFBooleanTrue, kCGImagePropertyJFIFIsProgressive,
                                nil];

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            [NSNumber numberWithFloat:.7], kCGImageDestinationLossyCompressionQuality,
                            jfifProperties, kCGImagePropertyJFIFDictionary,
                            nil];

CGImageDestinationAddImage(destination, ((UIImage*)object).CGImage, (__bridge CFDictionaryRef)properties);
CGImageDestinationFinalize(destination);
CFRelease(destination);

これはシミュレーターで実行する場合はうまく機能しますが、残念ながらデバイス上で分厚い/ブロック状の結果が生成されます。

分厚い/ブロック状の結果。

何が起こっているのかについて何かアイデアはありますか?最後の手段として使用することに戻りUIImageJPEGRepresentationます。プログレッシブJPEGが本当に必要です。

4

2 に答える 2

0

iOSシミュレーターでは、あなたが言ったように大丈夫です。

しかし、Retinaディスプレイを搭載したIOSシミュレーターでテストしましたか。これを行うには、次の手順を実行します。1.シミュレーターを起動します。2。[ハードウェア]-> [デバイス]に移動します。3。Retinaディスプレイを備えたシミュレーターを選択し、もう一度確認します。

iOS Retinaシミュレーターで問題が発生した場合は、問題が発生します。

解像度が非常に小さい画像を使用して、デバイスでテストしてみてください。

で非常に高解像度の画像を表示するための問題はほとんどありませんUIImageView。以下のリンクを確認してください。- UIImageViewの高解像度画像

于 2012-08-04T08:41:46.287 に答える
0

良いニュース:これをiPhone 4でテストしたところ、画像は見栄えがします。

NSDictionary *jfifProperties = [NSDictionary dictionaryWithObjectsAndKeys:
@72, kCGImagePropertyJFIFXDensity,
@72, kCGImagePropertyJFIFYDensity,
@1, kCGImagePropertyJFIFDensityUnit,
nil];

(新しいリテラル構文を使用)。

これらの密度オプションの意味についての優れたJFIFリファレンス。

于 2012-08-08T22:54:42.680 に答える