gpt4 book ai didi

objective-c - 使用 Objective C 将 RGB 彩色图像更改为灰度图像

转载 作者:太空狗 更新时间:2023-10-30 03:34:38 26 4
gpt4 key购买 nike

我正在开发一个将彩色图像更改为灰色图像的应用程序。但是,有些图片怎么出来的不对。我不知道代码有什么问题。也许我输入的参数有误,请帮忙。

 UIImage *c = [UIImage imageNamed:@"downRed.png"];
CGImageRef cRef = CGImageRetain(c.CGImage);

NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(cRef));

size_t w = CGImageGetWidth(cRef);
size_t h = CGImageGetHeight(cRef);

unsigned char* pixelBytes = (unsigned char *)[pixelData bytes];

unsigned char* greyPixelData = (unsigned char*) malloc(w*h);

for (int y = 0; y < h; y++) {
for(int x = 0; x < w; x++){

int iter = 4*(w*y+x);
int red = pixe lBytes[iter];
int green = pixelBytes[iter+1];
int blue = pixelBytes[iter+2];
greyPixelData[w*y+x] = (unsigned char)(red*0.3 + green*0.59+ blue*0.11);
int value = greyPixelData[w*y+x];

}
}

CFDataRef imgData = CFDataCreate(NULL, greyPixelData, w*h);


CGDataProviderRef imgDataProvider = CGDataProviderCreateWithCFData(imgData);


size_t width = CGImageGetWidth(cRef);
size_t height = CGImageGetHeight(cRef);
size_t bitsPerComponent = 8;
size_t bitsPerPixel = 8;
size_t bytesPerRow = CGImageGetWidth(cRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGBitmapInfo info = kCGImageAlphaNone;
CGFloat *decode = NULL;
BOOL shouldInteroplate = NO;
CGColorRenderingIntent intent = kCGRenderingIntentDefault;
CGDataProviderRelease(imgDataProvider);

CGImageRef throughCGImage = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpace, info, imgDataProvider, decode, shouldInteroplate, intent);


UIImage* newImage = [UIImage imageWithCGImage:throughCGImage];

CGImageRelease(throughCGImage);
newImageView.image = newImage;

最佳答案

如果有人想要对包含透明部分的图像进行灰度化,digipeople 提供的解决方案将在其周围使用黑色 mask 。改用它可以使透明保持原样。

- (UIImage *)imageToGreyImage:(UIImage *)image {
// Create image rectangle with current image width/height
CGFloat actualWidth = image.size.width;
CGFloat actualHeight = image.size.height;

CGRect imageRect = CGRectMake(0, 0, actualWidth, actualHeight);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();

CGContextRef context = CGBitmapContextCreate(nil, actualWidth, actualHeight, 8, 0, colorSpace, kCGImageAlphaNone);
CGContextDrawImage(context, imageRect, [image CGImage]);

CGImageRef grayImage = CGBitmapContextCreateImage(context);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);

context = CGBitmapContextCreate(nil, actualWidth, actualHeight, 8, 0, nil, kCGImageAlphaOnly);
CGContextDrawImage(context, imageRect, [image CGImage]);
CGImageRef mask = CGBitmapContextCreateImage(context);
CGContextRelease(context);

UIImage *grayScaleImage = [UIImage imageWithCGImage:CGImageCreateWithMask(grayImage, mask) scale:image.scale orientation:image.imageOrientation];
CGImageRelease(grayImage);
CGImageRelease(mask);

// Return the new grayscale image
return grayScaleImage;
}

关于objective-c - 使用 Objective C 将 RGB 彩色图像更改为灰度图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com