0

こんにちは、コードを使用して画像のサイズを変更しています

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

- (UIImage *)resizedImage:(CGSize)newSize
                transform:(CGAffineTransform)transform
           drawTransposed:(BOOL)transpose
     interpolationQuality:(CGInterpolationQuality)quality {
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height));
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width);
    CGImageRef imageRef = self.CGImage;

    CGBitmapInfo bitMapInfo = CGImageGetBitmapInfo(imageRef);

    // Build a context that's the same dimensions as the new size
    CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                                newRect.size.width,
                                                newRect.size.height,
                                                CGImageGetBitsPerComponent(imageRef),
                                                0,
                                                CGImageGetColorSpace(imageRef),
                                                bitMapInfo);

    // Rotate and/or flip the image if required by its orientation
    CGContextConcatCTM(bitmap, transform);

    // Set the quality level to use when rescaling
    CGContextSetInterpolationQuality(bitmap, quality);

    // Draw into the context; this scales the image
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef);

    // Get the resized image from the context and a UIImage
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap);
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef];

    // Clean up
    CGContextRelease(bitmap);
    CGImageRelease(newImageRef);

    return newImage;
}

通常の画像では期待どおりに機能しています。ただし、png-8 画像を指定しようとすると失敗します。コマンドラインで file image.png と入力すると、png-8 画像として認識されます。出力は

image.png: PNG image data, 800 x 264, 8-bit colormap, non-interlaced

コンソールのエラー メッセージは、サポートされていない色空間です。

グーグルで調べたところ、「インデックス付きの色空間はビットマップ グラフィックス コンテキストではサポートされていない」ことがわかりました。

いくつかのアドバイスに従って、元の色空間を使用する代わりに、次のように変更しました

colorSpace = CGColorSpaceCreateDeviceRGB();

今、私はこの新しいエラーを取得しています:

CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 24 bits/pixel; 3-component color space; kCGImageAlphaNone; 2400 bytes/row.

参考までに、私の画像は幅 800 px です。

この問題を解決するにはどうすればよいですか? どうもありがとう!

4

1 に答える 1

0

サポートされている形式のリストがここにあることに気付きました: https://developer.apple.com/library/ios/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_context/dq_context.html#//apple_ref/doc/uid/TP30001066-CH203 -BCIBHHBB

そして、24ビット/ピクセルのものはありません。

そこで、ここで受け入れられたソリューションの使用を終了しました: iPhone: CGImageAlphaInfo の CGImage の変更

于 2013-10-10T08:00:13.893 に答える