iPhone BitmapImageRep - PullRequest
       8

iPhone BitmapImageRep

0 голосов
/ 29 апреля 2009

У меня есть буфер с данными изображения JPEG. Мне нужно отобразить это изображение в UIImageView. Мне нужно преобразовать этот буфер изображения в объект UIImage и использовать его следующим образом

NSData * data = [NSData dataWithContentsOfFile: appFile]; UIImage * theImage = [[UIImage alloc] initWithData: data];

Я получаю отображаемое изображение, но с низким разрешением по сравнению с фактическим разрешением. Нужно ли сначала конвертировать его в растровое изображение, а затем использовать его с UIImage? Я не могу использовать NSBitmapImageRep. Любые идеи о том, как этого можно достичь?

1 Ответ

2 голосов
/ 29 апреля 2009

Если размеры кадра UIImageView отличаются от размеров исходного изображения, вы получите измененную версию изображения. Качество может быть довольно грубым в зависимости от того, сколько преобразования выполняется.

Я где-то нашел этот код в сети (извините, автор оригинала - я потерял авторство), который выполняет более плавное изменение размера:

UIImage* resizedImage(UIImage *inImage, CGRect thumbRect)
{
    CGImageRef          imageRef = [inImage CGImage];
    CGImageAlphaInfo    alphaInfo = CGImageGetAlphaInfo(imageRef);

    // There's a wierdness with kCGImageAlphaNone and CGBitmapContextCreate
    // see Supported Pixel Formats in the Quartz 2D Programming Guide
    // Creating a Bitmap Graphics Context section
    // only RGB 8 bit images with alpha of kCGImageAlphaNoneSkipFirst, kCGImageAlphaNoneSkipLast, kCGImageAlphaPremultipliedFirst,
    // and kCGImageAlphaPremultipliedLast, with a few other oddball image kinds are supported
    // The images on input here are likely to be png or jpeg files
    if (alphaInfo == kCGImageAlphaNone)
        alphaInfo = kCGImageAlphaNoneSkipLast;

    // Build a bitmap context that's the size of the thumbRect
    CGContextRef bitmap = CGBitmapContextCreate(
                                                NULL,
                                                thumbRect.size.width,       // width
                                                thumbRect.size.height,      // height
                                                CGImageGetBitsPerComponent(imageRef),   // really needs to always be 8
                                                4 * thumbRect.size.width,   // rowbytes
                                                CGImageGetColorSpace(imageRef),
                                                alphaInfo
                                                );

    // Draw into the context, this scales the image
    CGContextDrawImage(bitmap, thumbRect, imageRef);

    // Get an image from the context and a UIImage
    CGImageRef  ref = CGBitmapContextCreateImage(bitmap);
    UIImage*    result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);   // ok if NULL
    CGImageRelease(ref);

    return result;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...