gpt4 book ai didi

cocoa - NSBitmapImageRep 中的子像素抗锯齿

转载 作者:行者123 更新时间:2023-12-03 17:05:01 25 4
gpt4 key购买 nike

有没有办法在具有子像素抗锯齿功能的 NSBitMapImageRep 中绘制文本?文本绘制在不透明的白色背景上,我尝试使用 CGContextSetShouldSmoothFonts 函数,但这似乎没有帮助。

NSBitmapImageRep *bm = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL pixelsWide:300 pixelsHigh:300 bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSCalibratedRGBColorSpace bytesPerRow:0 bitsPerPixel:0];
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithBitmapImageRep:bm]];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0, 0, 300, 300));
CGContextRef ctx = NSGraphicsContext.currentContext.graphicsPort;
CGContextSetShouldSmoothFonts(ctx, true);
[@"Example" drawAtPoint:NSZeroPoint withAttributes:nil];
[[bm TIFFRepresentation] writeToFile:[@"~/Desktop/bitmap.tiff" stringByExpandingTildeInPath] atomically:NO];

当我使用 -[NSImage lockFocus] 绘制 NSImage 时,可以使文本平滑工作,但在 Retina 显示屏上运行时这并不可靠.

最佳答案

我最终使用这个替代代码来实现文本平滑:

CGColorSpaceRef cs = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGContextRef c = CGBitmapContextCreate(NULL, 300, 300, 8, 300 * 4, cs, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little);
[NSGraphicsContext setCurrentContext:[NSGraphicsContext graphicsContextWithGraphicsPort:c flipped:NO]];
[[NSColor whiteColor] set];
NSRectFill(NSMakeRect(0, 0, 300, 300));
[@"Example" drawAtPoint:NSZeroPoint withAttributes:nil];
CGImageRef cgImage = CGBitmapContextCreateImage(c);
NSImage *im = [[NSImage alloc] initWithCGImage:cgImage size:NSZeroSize];
[[im TIFFRepresentation] writeToFile:[@"~/Desktop/cgImage.tiff" stringByExpandingTildeInPath] atomically:NO];
CGImageRelease(cgImage);
CGColorSpaceRelease(cs);
CGContextRelease(c);

关于cocoa - NSBitmapImageRep 中的子像素抗锯齿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11261501/

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