GDI 學習筆記

2022-02-20 23:08:15 字數 1235 閱讀 6619

gdi+不支援異或繪圖,而使用雙快取方式,避免了圖形閃爍,但是速度稍慢,占用記憶體較多。隨著硬體發展,這是乙個圖形編輯器的趨勢;

用 gdi+ 開發向量圖形編輯系統的經驗之談

效能篇「經過無數次的實驗,終於形成了自己的**風格」:宣告兩個bitmap物件,乙個用於即時的圖形繪製,另乙個用於存放已有的圖形。在用滑鼠繪圖的過程中,直接把bitmap複製到繪圖視窗所對應的graphics上,以提公升繪圖的速度;

避免用三角函式、平方根、除法;

避免大量使用structure;

不同的圖元有不同的影象拾取演算法,一般常用的向量計算方法可以保證較高的演算法效率;

專案的物件建模

要考慮幾個方面:確定圖元、圖元引數的儲存和處理、座標系、影象時拾取。

操作圖元引數時,直接把畫素值儲存在圖元引數中比較方便。因為single型別的「資料還原性」很差,而圖形經過旋轉、縮放、座標系變換後,必須用double型別處理,所以可以考慮把所有圖元引數全部用double型別處理,損失一些效能但換來了易用性。

也提到了gdi+採用float型別帶來的精度問題。另外此文提出要解決精度的問題,需要避免使用座標變換。整個繪製過程中保持

「世界座標系」和裝置座標系統一,然後自己記錄實際座標與裝置座標的縮放和偏移,然後在繪製時將實際座標轉換為裝置座標。

「自己進行座標轉換也不難,簡單的仿射變換」

read:《gdi+的雷區 》

gdi+變換之後的座標被限制在以下範圍

x -4194304.0f

y -4194304.0f

width 8388608.0f

height 8388608.0f

如果超出範圍,圖形畫不出,

inst:了解gdi+ 2.0所作的改進

inst:了解「放射變換」作座標變換

目前的需求是要在windows窗體上呈現一些圖形元件,類似ms visio,可以從工具箱中拖**形元件到畫板上。現在有兩種備選方式:

方式一:繪製閉合的線條,然後填充;

方式二:準備好,然後繪製。

使用方式一,連線線條的各個點的位置需要使用繪圖工具輔助確定,然後以漸變色填充。問題是如果要新增新的圖形元件,必須要修改程式,除非引入反射和配置機制,實現執行時載入擴充的繪製新圖形元件的型別;

使用方式二,好處是擴充的成本要低一些,但是為了要高亮選中的圖形元件,需要另外準備一套,作實時替換,而替換需要多個操作,如重新繫結業務物件、重新填充文字。

因為專案規模較小、需要的圖形元件只有確定的數量,所以考慮方式一實現。

Gdi 學習筆記(一)

最近在看 gdi 圖形程式設計 mahesh chand編著 這本書。這裡記錄下一些學習體會。gdi 的定義 gdi 是乙個庫,它提供了乙個介面,允許程式設計師編寫與印表機 監視器或檔案等圖形裝置進行互動的windows和web圖形應用程式。gdi 是一組c 類,位於名為gdiplus.dll的類庫...

GDI 學習筆記(一)

1 在應用程式中新增gdi 的包含檔案gdiplus.h 以及附加的類庫gdiplus.lib。通常gdiplus.h包含檔案新增在應用程式的stdafx.h檔案中,而gdiplus.lib可用兩種進行新增 第一種是直接在stdafx.h檔案中新增下列語句 pragma comment lib,gd...

GDI 學習筆記之GDI 環境初始化

儘管以前接觸過一下gdi 但決心從現在開始系統學習gdi 所用的教材為 精通gdi程式設計 在vs 2010以下版本的vs 編譯器使用gdi 都需要對gdi 環境進行初始化操作 vs 2010中的mfc 10依賴gdi 故不用初始化 vs 2003 vs 2005和vs 2008的gdi 環境初始化...