(iphone) изображение в градациях серого слишком темное, можно ли изменить непрозрачность изображения в оттенках серого? - PullRequest
4 голосов
/ 21 мая 2011

Я использую следующий код для преобразования цветного изображения в изображение в градациях серого.

Полученное изображение серое, но слишком темное.
Можно ли изменить его непрозрачность?(не уверен, что термин «непрозрачность» является правильным словом для него)

+ (UIImage *)convertImageToGrayScale: (UIImage*) image
{
    // Create image rectangle with current image width/height                                                                                                                                                                               
    CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);

    // Grayscale color space                                                                                                                                                                                                                
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

    // Create bitmap content with current image size and grayscale colorspace                                                                                                                                                               
    CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone);

    // Draw image into current context, with specified rectangle                                                                                                                                                                            
    // using previously defined context (with grayscale colorspace)                                                                                                                                                                         
    CGContextDrawImage(context, imageRect, [image CGImage]);

    // Create bitmap image info from pixel data in current context                                                                                                                                                                          
    CGImageRef imageRef = CGBitmapContextCreateImage(context);

    // Create a new UIImage object                                                                                                                                                                                                          
    UIImage *newImage = [UIImage imageWithCGImage:imageRef];

    // Release colorspace, context and bitmap information                                                                                                                                                                                   
    CGColorSpaceRelease(colorSpace);
    CGContextRelease(context);
    CFRelease(imageRef);

    // Return the new grayscale image                                                                                                                                                                                                       
    return newImage;
}

1 Ответ

0 голосов
/ 03 июня 2011

Простое преобразование в оттенки серого иногда может привести к тому, что изображение станет слишком темным, поскольку преобразование RGB-> Оттенки серого может не сохранить яркость (воспринимаемая яркость) изображения.У вас есть два варианта: (1) сделать изображение ярче после преобразования в оттенки серого (вы можете попробовать simple-iphone-image-processing );и (2) преобразуйте изображение, сохраняя яркость.

Один из распространенных способов преобразования из RGB в градации серого при сохранении яркости состоит в установке значения серого (Y) в соответствии со следующей функцией:

Y= 0,30 x Красный + 0,59 x Зеленый + 0,11 x Синий

Это работает, потому что человеческий глаз воспринимает заданную интенсивность зеленого цвета как "более яркую", чем такая же интенсивность красного или синего (приблизительно в этом соотношении).

...