/ / Cairo Radial Gradient - cairo, radialne gradienty

Cairo Radial Gradient - cairo, radialne gradienty

Używam promieniowego gradientu w Kairze, ale nie jestemuzyskanie oczekiwanych rezultatów. Gradient radialny, który uzyskuję, jest znacznie mniej rozmyta, niż się spodziewałem i nie wydaje mi się, żeby bawić się z kolorowymi ogranicznikami, aby uzyskać pożądane rezultaty. Oto kod:

cairo_pattern_t *pat;

pat = cairo_pattern_create_radial(100.0, 100.0, 0.0, 100.0, 100.0, 20.0);
cairo_pattern_add_color_stop_rgba(pat, 0, 0, 0, 0, 1);
cairo_pattern_add_color_stop_rgba(pat, 1, 0, 0, 0, 0);

Oto obraz tego, o czym mówię.

gradient radialny

Odpowiedzi:

5 dla odpowiedzi № 1

Kanał IRC #cairo zasugerował (dziękuję!) Użycie cairo_mask () zamiast cairo_paint () do narysowania gradientu. W rezultacie powstaje kwadrat zamiast liniowego postępu.

Zrobiłem to w lua. Przepraszam za język, ale łatwiej jest coś prototypować, ponieważ mapuje on 1: 1 do API C i nie powinien być trudny do przetłumaczenia:

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")

Dla mnie drugi krąg (ten, który był cairo_mask () "d z czarnym źródłem) wygląda dużo bardziej jak to, co chcesz:

Obraz, który wytwarza kod Lua