【发布时间】:2018-09-24 02:18:41
【问题描述】:
我正在尝试使用 Cairo 创建灰度图像,但是在控制笔的像素强度时遇到了问题。
例如,在 RGB 彩色图像中,我将使用此代码将背景绘制成红色,红色通道中像素强度为 127
surface = cairo.ImageSurface(cairo.FORMAT_RGB24, WIDTH, HEIGHT)
ctx = cairo.Context(surface)
ctx.set_source_rgb(.5, 0, 0)
ctx.rectangle(0, 0, WIDTH, HEIGHT)
ctx.fill()
我找不到灰度图像的任何等效代码。 我不能简单地使用 alpha 通道,因为那样我就不能在矩形上画圆。例如,拿下面的代码 sn-p,我想有:
- 灰色背景
-
灰色背景上的黑色圆圈
surface = cairo.ImageSurface(cairo.FORMAT_A8, WIDTH, HEIGHT) ctx = cairo.Context(surface) ctx.set_source_rgba(0, 0, 0, 0.5) ctx.rectangle(0, 0, WIDTH, HEIGHT) ctx.fill() ctx.set_source_rgba(0, 0, 0, 0.0) ctx.arc(WIDTH//2, HEIGHT//2, r, 0, 2*math.pi) ctx.fill()
在上面的代码中,黑色圆圈不会出现,因为它的 alpha 通道低于灰色背景。我该如何解决这个问题?
【问题讨论】:
-
您在第二个示例中的目标到底是什么?你使用 set_source_rgb,所以这里有 alpha=1。所以,你只是用非 alpha 填充表面。 ctx.set_operator(cairo.OPERATOR_SOURCE) 可能会帮助您/做您想做的事吗?
-
嘿@UliSchlachter,我更新了我的帖子以包含更多关于我想要实现的目标的信息,关于
ctx.set_operator,OPERATOR_CLEAR 可能会起作用。我会尝试一下并回复你。我不知道set_operator方法,感谢您提出!