3

我不太了解预乘的阿尔法。

我需要一个没有 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 字节/行。

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

4

2 回答 2

3

没有。Quartz 支持的格式在此处列出,就像您收到的错误消息一样,没有 alpha 的 24 位不是其中之一。由于 AppKit 的绘图 API 构建在 Quartz 之上,因此该列表也适用于 AppKit。

[NSColor blackColor]您可以做的最好的事情是在绘制您想要绘制的任何内容之前用纯色填充您的上下文,例如,。您在上下文中仍然有一个 Alpha 通道,但没有实际的透明度。

于 2012-01-02T20:34:11.147 回答
0

澄清一下,NSBitmapImageRep 确实支持 24 位/像素。但是,NSGraphicsContext 不支持这种格式。显然,Quartz 绘图系统始终需要 Alpha 通道。

于 2012-01-02T22:03:56.507 回答