是否有可能使一个NSBitmapImageRep与24 bpp和没有alpha通道



我不太明白预乘alpha。

我需要一个没有alpha通道的NSBitmapImageRep(我不需要一个特定的bpp)。

我的问题是这段代码给了我错误:

NSSize imageSize = NSMakeSize(200, 200);
//create a non-alpha RGB image rep with the same dimensions as the image
  NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc]
                         initWithBitmapDataPlanes:NULL
                         pixelsWide:imageSize.width
                         pixelsHigh:imageSize.height
                         bitsPerSample:8
                         samplesPerPixel:3
                         hasAlpha:NO
                         isPlanar:NO
                         bitmapFormat:NSAlphaNonpremultipliedBitmapFormat
                         bytesPerRow:(3 * imageSize.width)
                         bitsPerPixel:24];
//lock focus on the bitmap
   NSGraphicsContext *context = [NSGraphicsContext graphicsContextWithBitmapImageRep:bitmap];
   [NSGraphicsContext saveGraphicsState];
   [NSGraphicsContext setCurrentContext:context];
//draw the image into the bitmap
[prueba drawAtPoint:NSMakePoint(0, 0) withAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[NSFont systemFontOfSize:24], NSFontAttributeName, nil]];
[NSGraphicsContext restoreGraphicsState];
//get the TIFF data
   NSData* tiffData = [bitmap TIFFRepresentation];
//do something with TIFF data
   NSError *error = nil;
   [tiffData writeToFile:@"/Users/Paul/test.tif" options:NSDataWritingAtomic error:&error];

错误:CGBitmapContextCreate:不支持的参数组合:8整数位/组件;24位/像素;三分量色彩空间;kCGImageAlphaNone;640字节/行。

好的,我知道这个组合是不支持的,但是我需要这样的东西,我找不到解决方案

没有。Quartz支持的格式在这里列出,就像你得到的错误消息所说的那样,不带alpha的24位不是其中之一。因为AppKit的绘图api是建立在Quartz之上的,所以这个列表也适用于AppKit。

你能做的最好的是在你画任何你想画的东西之前,用纯色填充你的上下文,比如[NSColor blackColor]。在上下文中,您仍然有一个alpha通道,但没有实际的透明度。

澄清一下,NSBitmapImageRep确实支持24位/像素。然而,NSGraphicsContext不支持这种格式。显然,石英绘图系统总是需要alpha通道。

相关内容

  • 没有找到相关文章

最新更新