Tôi đã phát triển một ứng dụng thay đổi hình ảnh màu thành hình ảnh màu xám. Tuy nhiên, một số hình ảnh như thế nào đi ra sai. Tôi không biết có gì sai với mã. có lẽ các tham số mà tôi đưa vào là sai xin vui lòng giúp đỡ.Thay đổi hình ảnh màu RGB thành hình ảnh Màu xám bằng cách sử dụng Mục tiêu C
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;
Dưới đây là một chủ đề tương tự có thể giúp bạn ra ngoài : http://stackoverflow.com/questions/4030430/iphone-convert-color-image-to-2bit-image-black-white –
lỗi bạn đang gặp phải là gì? ngoài ra, hãy sử dụng lựa chọn '{}' để định dạng mã của bạn trong tương lai. – KevinDTimm
Cảm ơn bạn đã liên kết. Tuy nhiên nó đã không giúp tôi, (tôi không nhận được bất kỳ lỗi nào nhưng hình ảnh đi ra lạ. Nó trông đáng kinh ngạc. –