ios - 在 iOS 中使用棕褐色图像效果时出错?

标签 ios uiimageview effects

在我的应用程序中,我有一个 imageViewimageView 中的图像应该具有棕褐色、黑色和白色等效果。
为了实现棕褐色效果,我使用了以下代码,

 -(UIImage*)makeSepiaScale:(UIImage*)image
{
    CGImageRef cgImage = [image CGImage];
    CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
    CFDataRef bitmapData = CGDataProviderCopyData(provider);
    UInt8* data = (UInt8*)CFDataGetBytePtr(bitmapData);

    int imagWidth = image.size.width;
    int imageheight = image.size.height;
    NSInteger myDataLength = imagWidth * imageheight * 4;


    for (int i = 0; i < myDataLength; i+=4)
    {
        UInt8 r_pixel = data[i];
        UInt8 g_pixel = data[i+1];
        UInt8 b_pixel = data[i+2];

        int outputRed = (r_pixel * .393) + (g_pixel *.769) + (b_pixel * .189);
        int outputGreen = (r_pixel * .349) + (g_pixel *.686) + (b_pixel * .168);
        int outputBlue = (r_pixel * .272) + (g_pixel *.534) + (b_pixel * .131);

        if(outputRed>255)outputRed=255;
        if(outputGreen>255)outputGreen=255;
        if(outputBlue>255)outputBlue=255;


        data[i] = outputRed;
        data[i+1] = outputGreen;
        data[i+2] = outputBlue;
    }

    CGDataProviderRef provider2 = CGDataProviderCreateWithData(NULL, data, myDataLength, NULL);
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * imagWidth;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
    CGImageRef imageRef = CGImageCreate(imagWidth, imageheight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider2, NULL, NO, renderingIntent);

    CGColorSpaceRelease(colorSpaceRef); // YOU CAN RELEASE THIS NOW
    CGDataProviderRelease(provider2); // YOU CAN RELEASE THIS NOW
    CFRelease(bitmapData);

    UIImage *sepiaImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef); // YOU CAN RELEASE THIS NOW
    return sepiaImage;
}

它工作得很好,但只适用于 .png 图像,当我使用 .jpg 图像时,它只为 imageView 显示黑色 View 。任何帮助将不胜感激

最佳答案

使用核心图像处理,

 -(void)makeSepiaScale
{
CIImage *beginImage =[[CIImage alloc]initWithImage:imageForView];

    CIContext * context=[CIContext contextWithOptions:nil];

    CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"
                                  keysAndValues: kCIInputImageKey, beginImage,
                        @"inputIntensity", @0.8, nil];
    CIImage *outImage = [filter outputImage];

    CGImageRef cgimg=[context createCGImage:outImage fromRect:[outImage extent]];


[imageView setImage:[UIImage imageWithCGImage:cgimg]];

关于ios - 在 iOS 中使用棕褐色图像效果时出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21903921/

相关文章:

JQuery - 背景图像缓慢变化

ios - 没有调用 cvGet2D 的匹配函数

ios - 使用 UIPanGestureRecognizer 向下滑动 UIView

ios - 通过手势交换单元格的位置

ios - 从子类添加 UIImageView 到 UIView

javascript - 在没有框架的情况下对 JavaScript : How to fade stuff, 等进行 Fx?

Jquery淡入/淡出动画问题

iOS:未触发 UIView 中的 TapGestureRecognizer

ios - Uber API 编译错误

ios - 使用 NSCoding 归档 UIImageView