#cairoのIRCチャンネルはグラデーションを描画する(おかげで当社が!)cairo_maskを(使用する)の代わりにcairo_paintの()を提案しました。その結果、線形の進行の代わりに二乗されます。
私はluaで次のことを行いました。申し訳ありませんが、プロトタイプ作成は簡単です。 C APIに1と変換するために難しいことではありません:これは1をマップ私に
cairo = require("lgi").cairo
s = cairo.ImageSurface(cairo.Format.ARGB32, 200, 100)
c = cairo.Context(s)
c:set_source_rgb(1, 1, 1)
c:paint()
p = cairo.Pattern.create_radial(50, 50, 0, 50, 50, 20)
p:add_color_stop_rgba(0, 0, 0, 0, 1)
p:add_color_stop_rgba(1, 0, 0, 0, 0)
c:save()
c:rectangle(0, 0, 100, 100)
c:clip()
c.source = p
c:paint()
c:restore()
p = cairo.Pattern.create_radial(50, 50, 2, 50, 50, 25)
p:add_color_stop_rgba(0, 0, 0, 0, 1)
p:add_color_stop_rgba(1, 0, 0, 0, 0)
c:translate(100, 0)
c:save()
c:rectangle(0, 0, 100, 100)
c:clip()
c.source = p
c:mask(p)
c:restore()
s:write_to_png("test.png")
、第二円(cairo_maskたものを()黒ソースとD ')もっとたくさん見えますあなたが欲しいもののように:

はどのように「私が望む何イメージを作成しましたか? –
私はPixelmatorに入り、硬度0%のブラシを使いました。 – Q2Ftb3k
カイロの結果は、線形補間を使用しています。中心から離れた各ピクセルは、2つのグレーの明度を獲得します。 「私が望むもの」の結果は線形ではありません。あなたが私に推測してもらいたいのであれば、Pixelmatorの結果はガンマ補正されます。 –