日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyCairo渐变

發布時間:2024/4/11 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyCairo渐变 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PyCairo 教程的這個部分,我們將討論漸變。我們將提到線性的和徑向的漸變。

在計算機圖形學中,漸變是從淺色到深色或從一種顏色到另一種顏色的平滑混合。在 2D 繪圖程序和繪畫程序中,漸變被用于創建五彩繽紛的背景和特殊的效果,也用于模擬燈光和陰影。(answers.com)

線性漸變

線性漸變是顏色或色調沿著線的混合。在 PyCairo 中,它們由一個 cairo.LinearGradient 類表示。

#!/usr/bin/python''' ZetCode PyCairo tutorial This program works with linear gradients in PyCairo.author: Jan Bodnar website: zetcode.com last edited: August 2018 '''import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk import cairoclass Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()def init_ui(self): darea = Gtk.DrawingArea()darea.connect("draw", self.on_draw)self.add(darea)self.set_title("Linear gradients")self.resize(340, 390)self.set_position(Gtk.WindowPosition.CENTER)self.connect("delete-event", Gtk.main_quit)self.show_all()def on_draw(self, wid, cr):self.draw_gradient1(cr)self.draw_gradient2(cr)self.draw_gradient3(cr)def draw_gradient1(self, cr):lg1 = cairo.LinearGradient(0.0, 0.0, 350.0, 350.0)count = 1i = 0.1 while i < 1.0: if count % 2:lg1.add_color_stop_rgba(i, 0, 0, 0, 1)else:lg1.add_color_stop_rgba(i, 1, 0, 0, 1)i = i + 0.1count = count + 1 cr.rectangle(20, 20, 300, 100)cr.set_source(lg1)cr.fill()def draw_gradient2(self, cr): lg2 = cairo.LinearGradient(0.0, 0.0, 350.0, 0)count = 1i = 0.05 while i < 0.95: if count % 2:lg2.add_color_stop_rgba(i, 0, 0, 0, 1)else:lg2.add_color_stop_rgba(i, 0, 0, 1, 1)i = i + 0.025count = count + 1 cr.rectangle(20, 140, 300, 100)cr.set_source(lg2)cr.fill()def draw_gradient3(self, cr): lg3 = cairo.LinearGradient(20.0, 260.0, 20.0, 360.0)lg3.add_color_stop_rgba(0.1, 0, 0, 0, 1) lg3.add_color_stop_rgba(0.5, 1, 1, 0, 1) lg3.add_color_stop_rgba(0.9, 0, 0, 0, 1) cr.rectangle(20, 260, 300, 100)cr.set_source(lg3)cr.fill()def main():app = Example()Gtk.main()if __name__ == "__main__": main()

這個例子繪制了由線性漸變填充的三個矩形。

lg3 = cairo.LinearGradient(20.0, 260.0, 20.0, 360.0)

此處我們創建了一個線性漸變。參數指定了一條直線,我們沿著這條直線繪制。這是一條豎直直線。

lg3.add_color_stop_rgba(0.1, 0, 0, 0, 1) lg3.add_color_stop_rgba(0.5, 1, 1, 0, 1) lg3.add_color_stop_rgba(0.9, 0, 0, 0, 1)

我們定義顏色終止點來產生我們的漸變模式。在這個例子中,漸變是黑色和黃色的混合。通過添加兩個黑色和一個黃色終止點,我們創建了一個橫向的漸變模式。這些終止點實際意味著什么呢?在我們的例子中,我們以黑色開始,它會終止于 1/10 大小處。然后我們逐漸地用黃色來繪制,這將在形狀的中心達到高潮。黃色終止于 9/10 大小處,我們在此處再次開始用黑色繪制,直到終點。

徑向漸變

徑向漸變是兩個圓之間的顏色或色調的混合。在PyCairo中,用 cairo.RadialGradient 類創建徑向漸變。

#!/usr/bin/python''' ZetCode PyCairo tutorialThis program works with radial gradients in PyCairo.author: Jan Bodnar website: zetcode.com last edited: August 2012 '''import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk import cairo import mathclass Example(Gtk.Window):def __init__(self):super(Example, self).__init__()self.init_ui()def init_ui(self): darea = Gtk.DrawingArea()darea.connect("draw", self.on_draw)self.add(darea)self.set_title("Radial gradients")self.resize(300, 200)self.set_position(Gtk.WindowPosition.CENTER)self.connect("delete-event", Gtk.main_quit)self.show_all()def on_draw(self, wid, cr):self.draw_gradient1(cr)self.draw_gradient2(cr)def draw_gradient1(self, cr):cr.set_source_rgba(0, 0, 0, 1)cr.set_line_width(12)cr.translate(60, 60)r1 = cairo.RadialGradient(30, 30, 10, 30, 30, 90)r1.add_color_stop_rgba(0, 1, 1, 1, 1)r1.add_color_stop_rgba(1, 0.6, 0.6, 0.6, 1)cr.set_source(r1)cr.arc(0, 0, 40, 0, math.pi * 2)cr.fill()cr.translate(120, 0)def draw_gradient2(self, cr): r2 = cairo.RadialGradient(0, 0, 10, 0, 0, 40)r2.add_color_stop_rgb(0, 1, 1, 0)r2.add_color_stop_rgb(0.8, 0, 0, 0)cr.set_source(r2)cr.arc(0, 0, 40, 0, math.pi * 2)cr.fill() def main():app = Example()Gtk.main()if __name__ == "__main__": main()

在這個例子中,我們繪制了兩個徑向漸變。

r1 = cairo.RadialGradient(30, 30, 10, 30, 30, 90)r1.add_color_stop_rgba(0, 1, 1, 1, 1)r1.add_color_stop_rgba(1, 0.6, 0.6, 0.6, 1)cr.set_source(r1)cr.arc(0, 0, 40, 0, math.pi * 2)cr.fill()

我們繪制了一個圓圈,并用徑向漸變填充它的內部。徑向漸變由兩個圓定義。add_color_stop_rgba() 方法定義顏色。我們可以試驗圓的位置或半徑的長度。在第一個漸變的例子中,我們創建一個對象,它類似于一個 3D 形狀。

r2 = cairo.RadialGradient(0, 0, 10, 0, 0, 40)r2.add_color_stop_rgb(0, 1, 1, 0)r2.add_color_stop_rgb(0.8, 0, 0, 0)cr.set_source(r2)cr.arc(0, 0, 40, 0, math.pi * 2)cr.fill()

在這個例子中,定義徑向漸變的圓和將要繪制的圓,具有相同的中心位置。

在這一章中,我們討論了 PyCairo 的漸變。

原文

Done.

總結

以上是生活随笔為你收集整理的PyCairo渐变的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。