1

AsyncImageViewhttps://github.com/nicklockwood/AsyncImageView)をカバーとしてCoverflow (iCarousel)を実装しようとしています。最大4MBのサイズの画像でうまく機能します。しかし、10 MBを超えるサイズの画像を読み込もうとすると、アプリがクラッシュします。私の質問は-

1)タイリングせずにサイズ10 MBの画像をロードできますか?画像のソースはデバイスカメラからのものであるため、それらの画像を並べて表示してからロードすることは可能ですか。もしそうなら、大きな画像をタイリングする際のアイデア/コードブロックを共有できますか?

追伸: UIImageJPEGRepresentation(image、scale)を使用して画像を圧縮しようとしましたが、画像サイズが10MBから100KBに減少しましたが、圧縮された画像を読み込もうとすると、メモリの問題が再び発生します。(iOSはある程度解凍しているように見えます)

4

2 に答える 2

3

画像のサイズとディスク上のサイズに混乱しています。

メモリ内の画像はWIDTH*HEIGHT * 4ピクセルを使用するため、画像が1000x1000pxであるとすると、4MbのRAMを使用することになります。

UIImageJPEGRepresentationは、圧縮率を使用して画像を保存するため、ディスク上の画像は小さくなりますが、画像のサイズは同じです。

問題を解決するには、ダウンロードした画像をCoverflowアイテムの正しいサイズに拡大縮小する必要があります。

これは、ImageIOフレームワークを使用して実行できます。

  • ダウンロードしたデータからCGImageSourceを作成する
  • 2つのプロパティkCGImageSourceCreateThumbnailFromImageIfAbsentおよびkCGImageSourceThumbnailMaxPixelSizeを指定してCGImageSourceCreateThumbnailAtIndexを呼び出します
于 2012-12-04T15:48:43.113 に答える
0

これが作業コードです

   UIImage *result = nil;
if ([data length]) { // NSData of the image


    CGImageSourceRef sourceRef = CGImageSourceCreateWithData((CFDataRef)data, nil);

    NSMutableDictionary *options = [NSMutableDictionary dictionary];

    [options setObject:(id)kCFBooleanTrue forKey:(id)kCGImageSourceCreateThumbnailFromImageIfAbsent];
    [options setObject:[NSNumber numberWithInt:400] forKey:(id)kCGImageSourceThumbnailMaxPixelSize];
    CGImageRef imageRef = CGImageSourceCreateThumbnailAtIndex(sourceRef, 0, (CFDictionaryRef)options);

    if (imageRef) {
        result = [UIImage imageWithCGImage:imageRef]; //Resulting image
        CGImageRelease(imageRef);
    }

    if (sourceRef) CFRelease(sourceRef);
于 2012-12-05T06:00:00.403 に答える