我正在构建一个需要将文件保存到磁盘的OS X应用程序。
我目前正在使用NSBitmapImageRep
代表我的代码中的图片,在使用representationUsingType:properties:
方法将图片保存到磁盘时,我想为图片设置hasAlpha
频道,但properties
词典似乎不支持这一点
所以,我试图创建一个 no-alpha 位图表示,但根据许多SO问题,不支持3通道/ 24位组合。那么,我该怎么做呢?
非常感谢!
答案 0 :(得分:1)
首先,我会尝试确保使用
创建NSBitmapImageRep-initWithBitmapDataPlanes:... hasAlpha:NO ...
并写出来,看看结果是否没有alpha-one会有所希望。
如果您正在尝试写出具有alpha但未写入alpha的图像,请先将其复制到非alpha图像中,然后将其写出来。
答案 1 :(得分:0)
`
NSURL *url = [NSURL fileURLWithPath:name];
CGImageSourceRef source;
NSImage *srcImage =[[NSImage alloc] initWithContentsOfURL:url];;
NSLog(@"URL: %@",url);
source = CGImageSourceCreateWithData((__bridge CFDataRef)[srcImage TIFFRepresentation], NULL);
CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, 0, NULL);
CGRect rect = CGRectMake(0.f, 0.f, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef));
CGContextRef bitmapContext = CGBitmapContextCreate(NULL,
rect.size.width,
rect.size.height,
CGImageGetBitsPerComponent(imageRef),
CGImageGetBytesPerRow(imageRef),
CGImageGetColorSpace(imageRef),
kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder32Little
);
CGContextDrawImage(bitmapContext, rect, imageRef);
CGImageRef decompressedImageRef = CGBitmapContextCreateImage(bitmapContext);
NSImage *finalImage = [[NSImage alloc] initWithCGImage:decompressedImageRef size:NSZeroSize];
NSData *imageData = [finalImage TIFFRepresentation];
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData];
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:0.9] forKey:NSImageCompressionFactor];
imageData = [imageRep representationUsingType:NSPNGFileType properties:imageProps];
[imageData writeToFile:name atomically:NO];
CGImageRelease(decompressedImageRef);
CGContextRelease(bitmapContext);
`