2017-04-08 106 views
0

我是開羅新手,嘗試使用透明顏色和筆觸創建文本。
描邊顏色的透明度工作,但文字填充顏色透明度transparency_value不起作用。 如果我減少transparency_value,文本顏色只是變暗(黑)和增加transparency_value使文本顏色更亮(綠色在我的情況)開羅填充透明

cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 640, 480); 
cairo_t* cairo = cairo_create(surface); 
cairo_set_font_face(cairo, myfont_face); 
cairo_set_font_size(cairo, 25); 
cairo_text_extents_t extents; 
cairo_text_extents(cairo, "Hello World", &extents); 
cairo_move_to(cairo, 200, 200);   
cairo_text_path(cairo, "Hello World"); 
double transparency_value = 0.5; 
cairo_set_source_rgba(cairo, 0,1,0,transparency_value); //transparency doesn't work 
//cairo_fill(cairo); //this didn't make a difference 
cairo_fill_preserve(cairo); 
cairo_set_source_rgba(cairo, 0.56, 0.76, 0.96, 0.5); //transparency works 
cairo_set_line_width(cairo, 1.5); 
cairo_stroke(cairo); 

回答

1

難道要繪製文本的表面之外?在以下示例中,我添加了對cairo_move_to(cr, 200, 200)的調用,現在我得到以下結果。 (這是寫在Lua和使用https://github.com/pavouk/lgi打電話到開羅,評論表明,我改變相比,您的版本的東西)

local cairo = require("lgi").cairo 
local surface = cairo.ImageSurface.create(cairo.Format.ARGB32, 640, 480) 
local cr = cairo.Context(surface) 
local myfont_face = cr:get_font_face() -- I have to get this from somewhere 
cr:move_to(200, 200) -- I added this line to make something appear 
cr:set_font_face(myfont_face) 
cr:set_font_size(25) 
cr:text_path("Hello World") 
local transparency_value = 0.5 
cr:set_source_rgba(0, 1, 0, transparency_value) 
-- cr:fill() 
cr:fill_preserve() 
cr:set_source_rgba(0.65, 0.76, 0.96, 0.5) 
cr:set_line_width(5) -- changed from 1.5 to 5 to make it more prominent 
cr:stroke() 
surface:write_to_png("/tmp/out.png") 

enter image description here

編輯:這是結果當我改變transparency_value 0.1 。顯然,結果是不同的,透明度正常工作(放大時,中間仍然會看到一些微弱的綠色)。

enter image description here

+2

感謝您的回覆。我曾經使用'cairo_move_to',否則我不會看到輸出。使代碼縮短,我跳過了'cairo_move_to'.I已更新代碼。我是否按照函數調用的順序做了任何錯誤? 並且您是否嘗試在代碼中更改'transparency_value'? –

+0

看我的編輯。我添加了另一張圖片,顯示了'transparency_value = 0.1'的結果。結果仍然看起來如預期,我不能再現你所看到的黑色。我究竟做錯了什麼」? –

+0

嗯!這是C++中的錯誤還是有可能我沒有正確構建cairo與freeType庫 - 所以得到錯誤的輸出? –