こんにちは、コードを使用して画像のサイズを変更しています
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 です。
この問題を解決するにはどうすればよいですか? どうもありがとう!