導航:首頁 > 使用方法 > gdi的基本使用方法

gdi的基本使用方法

發布時間:2022-07-30 01:14:33

Ⅰ gdi 怎麼

會員費用:每月10美金。按照2008年8月27日的中間價,大概相當於68.45元人民幣,一年下來就是821.4元。注意,這只是給傳銷公司的繳費,自己其實還要開通ADSL寬頻上網,還要買電腦,這些費用估計在3000-5000之間吧。

傳銷形式:典型的網路老鼠會,金字塔式,拚命發展下線。

特點:與傳統傳銷不同的是,這種傳銷形式一定要藉助互聯網來完成。對於不上網的人,只能當面說服拉動,最終還是要讓他(她)上網,無意中幫電信發展了不少ADSL用戶,壯大了網民隊伍。呵呵:-)

揭底:說白了,就是拿著一個垃圾東西當作產品,一棒一棒往下交接,直到系統崩潰為止,那個時候,剛剛入夥的傻人就是犧牲品了。為什麼說.WS域名是垃圾?目前國際流行的域名是.com,.net域名,國內流行的是.cn域名,這個.WS域名,僅僅是太平洋島上一個彈丸小國薩摩亞的域名。眼下比較貴的域名,也就一百多塊人民幣一年,.cn域名甚至只要1元人民幣就可以注冊。而.ws域名,作為這個GDI的傳銷產品,卻要800多元人民幣一年,這不是搶錢是什麼?

為了便於傳銷,始作俑者特別發明了每個月付款的形式,以攤薄費用,讓加入的人感覺代價很低。其實,這是世界上最貴和最沒有用的域名了。傳銷者還說,WS是website的縮寫,所以很名貴,其實,英文縮寫多了去了,根本不沾邊的事情,連大家前期一致看好的域名.ME,到現在推廣也是馬馬虎虎,沒有真正能用起來呢。

入這個老鼠會的人,必須要先買一個屬於自己的.ws域名,然後利用GDI公司提供的自助建站系統,可以輕松建立一個宣傳這個產品的忽悠人的網站,其實這個自助建設的站,每個人都是一樣的,就是域名和落款的人名、電話等聯系方式不同而已,以此來區分小老鼠是誰發展出來的,錢分給誰而已。也就是說,你買了這個域名,並不能自己用來做其他的事情,只能為這個傳銷公司做宣傳。萬一真有人說,我要解析到我自己單獨建設的網站去,當然也可以,等於賣給你一個全世界最貴的域名,你還要不斷交錢,他也不虧啊。真正做網站的人,是絕對不會去買一個完全沒有使用價值的域名的,所有買這個域名的人,都是用來招攬下層的小老鼠用的。

想對傳銷者說:收手吧。這個帳怎麼算都算不過來的。拿著一個垃圾產品去忽悠人,等於是在用自己的良心換錢,完全不值得的。再說了,真的能掙到錢嗎?掙不到的!就算你一年內發展了一萬個下線(那是不現實的),一個月的總收入才六十多萬,真正分到你手上有多少?一年如果真的能發展一萬下線,那你肯定是個絕對的營銷高手,做正行完全能比干傳銷掙的更多,更乾凈。

何苦趟這趟渾水呢?
更多網路賺錢騙局:http://american-gdi.tk

Ⅱ 怎麼使用gdi+

說在多不如視頻教程方便的拉~~~
來菜鳥大道吧,才更新了一個在MFC中使用GDI+的基礎教學視頻哦~
菜鳥大道是專為新人開設的,希望在這里可以開啟你的程序之路!

如何使用GDI繪制半透明矩形

HDC hBitmapDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rt.Width(), rt.Height());
SelectObject(hBitmapDC,hBitmap);
步驟2)在內存DC中繪圖
FillRgn(hBitmapDC, (HRGN)rgn, (HBRUSH)m_pGdiBrush);
Rectangle(hBitmapDC, 0, 0, 100, 100);
步驟3) 半透明混合
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;
bf.SourceConstantAlpha = 50;
AlphaBlend(hDC,rt.left,rt.top,rt.Width(),rt.Height(),hBitmapDC,0,0,rt.Width(),rt.Height(),bf);
2、GDI+
步驟1) 創建半透明畫刷
m_pBrush = new SolidBrush(Color(128, GetRValue(clrMask), GetGValue(clrMask), GetBValue(clrMask))); // 透明度 128
步驟2)使用畫刷繪圖
Graphics graphics(hDC);
graphics.FillPolygon(&m_pBrush, pts, 3, FillModeAlternate);
效率: GDI+ GDI。
使用GDI+繪圖簡單而高效,所以推薦使用GDI+。
3、Direct Draw
此方法比較復雜,沒有對Direct Draw有一定的了解,不推薦此方法。
代碼比較多,不做列舉,需要注意的地方有:
使用Direct Draw時,注意,繪制半透明多邊形的時候,因為牽涉到已有的圖像數據,所以會對繪圖頁面原有的圖像進行讀取操作。如果當前繪制頁面開辟在顯存中的時候,
對顯存的讀操作會導致整個渲染流水線的暫停,
從而嚴重影響程序的效率,此時,繪制半透明多邊形就會變得異常的慢。這時候需要將繪制頁面從顯存中更改至內存中。或者在內存中創建一個過度頁面,繪制完成後再往顯存頁面上貼圖。效率會有顯著提升,實測:

Ⅳ GDI++的一些使用方法

我用的也是gdi++。。的確跟瑞星和360很對不上路。我建議你在配置中的忽略列表中加入瑞星和360的進程名。
另外。我建議你使用gdi++的氦版。這個版本效果雖然差一點。但兼容性會強很多。
還有,替換宋體的雅黑我建議你使用碧海潮生的1.041版本。這個版本的雅黑字體對一些不配合gdi++的軟體比較好。
可以到極限主題去問問。哪裡高手多.
http://bbs.themex.net
那可以使用gditray的方式載入gdi++啊。

Ⅳ GDI+多線程安全使用方法

微軟已經在MSDN上說明了,不要在多線程里共享GDI或者GDI+對象,線程不可能因為一個GDI對象,而進行必要的同步控制。

Ⅵ c#中GDI 如何用

不知道你說的GDI算不算GDI+。

這樣說吧
======調用GDI+
很簡單,System.Drawing命名空間就是為GDI+而設計的,用Graphics類進行Draw/Fill函數,就是調用GDI+

======調用GDI
NET中繪圖多是GDI+的,但也有託管下的GDI函數,比如TextRender類就是GDI的,(因為GDI+的DrawString繪圖不精準,因此NET 2.0引入了GDI的TextRender)

也可以直接調用Windows API中的GDI,用DllImport鏈接gdi32.dll,調用裡面的函數就可以了。

Ⅶ MFC中如何使用GDI+繪制出圖形

1、可以在內存中建立一張緩存圖片,然後在這個圖片上畫你需要的圖,然後輸出到窗體,這樣你可以直接保存成圖片了。
2、畫在bitmap上
bitmap有save方法
創建graphics的時候用:Graphics.FromImage().

Ⅷ 如何使用GDI+繪制圖形可按規定路徑前進

C# GDI+編程之基礎篇
一、關於GDI+
從本質上來看,GDI+為開發者提供了一組實現與各種設備(例如監視器,列印機及其它具有圖形化能力但不及涉及這些圖形細節的設備)進行交互的庫函數。GDI+的本質在於,它能夠替代開發人員實現與例如顯示器及其它外設的交互;而從開發者角度來看,要實現與這些設備的直接交互卻是一項艱巨的任務。
下圖1展示了GDI+在開發人員與上述設備之間起著重要的中介作用。其中,GDI+為我們「包辦」了幾乎一切—從把一個簡單的字元串「HelloWorld」列印到控制台到繪制直線,矩形甚至是列印一個完整的表單等。

圖1.GDI+擔當著重要的中介作用
那麼,GDI+是如何工作的呢?為了弄清這個問題,讓我們來分析一個示例—繪制一條線段。實質上,一條線段就是一個從一個開始位置(X0,Y0)到一個結束位置(Xn,Yn)的一系列像素點的集合。為了畫出這樣的一條線段,設備(在本例中指顯示器)需要知道相應的設備坐標或物理坐標。
然而,開發人員不是直接告訴該設備,而是調用GDI+的drawLine()方法,然後,由GDI+在內存(即「視頻內存」)中繪制一條從點A到點B的直線。GDI+讀取點A和點B的位置,然後把它們轉換成一個像素序列,並且指令監視器顯示該像素序列。簡言之,GDI+把設備獨立的調用轉換成了一個設備可理解的形式;或者實現相反方向的轉換。
至此,我們已經簡單了解了GDI+的工作機理。現在,讓我們開始探討如何實現一些基本的圖像操作。
二、圖像操作—縮略圖,縮放與保存
在本文示例中,我們將實現如下的任務:
1. 創建縮略圖。
2. 縮放一個載入的圖像。
3. 保存一個操作中的圖像。
a) 創建縮略圖

縮略圖是圖像的濃縮版本。典型情況下,一幅縮略圖圖像的尺寸為80×200像素。在GDI+中,一個圖像的縮略圖可以通過使用Image類的GetThumbnailImage()方法來創建。其函數原型如下:

public Image GetThumbnailImage (

int thumbWidth,

int thumbHeight,

GetThumbnailImageAbort callback,

IntPtr callbackData

)

第一個參數相應於縮略圖的寬度;第二個參數相應於生成的縮略圖的高度;第三個參數是一個Image.GetThumbnailImageAbort委託。在 GDI+ 1.0 版中不使用此委託。即便如此,也必須創建一個委託並在該參數中傳遞對此委託的引用。第四個參數同樣沒有使用,但是也需要提供以實現兼容性。注意,第四個參數必須為IntPtr.Zero。
如果前兩個參數(也就是寬度和高度)都為0的話,那麼,GDI+返回一個嵌入式縮略圖。否則,使用系統定義尺寸創建該縮略圖。例如,如果img是一個圖像類的實例,並且使用的寬度和高度都是系統定義的,創建一個縮略圖的語句應該如下所示:

Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);

在此,thumbNailImage包含返回的縮略圖,而tnCallback是一個相應於Image.GetThumbnailImageAbort的函數,其定義如下:

//必須調用它,但是沒有使用

style='font-size:10.0pt;font-family:Verdana'>publicbool tnCallbackMethod()

...{

return false;

}

b) 縮放一個載入的圖像
縮放是放大或縮小一個圖像的過程—通過在圖像尺寸上乘以縮放因子實現。其中,縮放因子=期望的圖像尺寸/當前圖像尺寸。例如,要把一個圖像放大200%,則當前尺寸必須乘以200%(200%=200/100=2);為了縮小一個圖像到25%,則當前尺寸必須乘以25%或0.25(25/100=0.25倍)。
c) 保存圖像
保存操作是圖像操作中的關鍵操作之一。在保存一個圖像時,圖像相應的類型信息也必須進行保存;也就是說,該圖像的擴展名在這一過程中具有重要角色。每一種類型相應於一個特定的格式。實質上,在保存一個圖像時,根據該格式輸出數據是非常必要的。然而,藉助於GDI+ API的優勢,一個對Image類的Save()方法的簡單調用就可以把相應的寫數據操作中所有細節省略掉。這個方法使用兩個參數—被保存的圖像的名字和待保存圖像的格式。該格式能夠通過ImageFormat類提供的類型來指定。下列表格指定了GDI+支持的各種圖像格式。
屬性 描述

Bmp 指定BMP格式。

Emf 指定EMF(增強的元文件格式)。

Exif 指定EXIF格式。

Gif 指定GIF格式。

Guid 指定一個GUID結構,用於描述ImageFormatobject。

Icon 指定Windows圖標格式。

Jpeg 指定JPEG格式。

MemoryBmp 指定內存點陣圖格式。

Png 指定PNG格式。

Tiff 指定TIFF格式。

Wmf 指定WMF(Windows元文件格式)。

其中,Emf和Wmf是特定於Windows系統的。
假定你想使用名字「checker.gif」保存一個圖像,那麼,相應的實現語句將是:

curImage.Save(「checker.gif」,ImageFormat.Gif);

這里,curImage對應於Image類的實例。
在下一節中,我將對前面開發的這個應用程序進行擴展。
三、實際開發中的圖像操作
下面,我們來討論實際中的使用情況。我將在本文示例應用程序中添加下列功能:
1. 以用戶指定的格式保存圖像。

2. 根據從菜單下選擇的百分比放大圖像。

3. 創建一個載入圖像的略縮圖。
相應的菜單操作如下所示:
mnuSave—文件菜單下保存圖像的子菜單。

mnu200Zoom—放大圖像200%。

mnuThumbNail—創建圖像的一個略縮圖。
下面是處理菜單項mnuSave的Click事件相應的方法:

private void mnuSave_Click(object sender,System.EventArgs e)

...{

//如果圖像已經創建

if(curImage == null)

return;

//調用SaveFileDialog對話框

SaveFileDialog saveDlg = new SaveFileDialog();

saveDlg.Title = "Save Image As";

saveDlg.OverwritePrompt = true;

saveDlg.CheckPathExists = true;

saveDlg.Filter =

"Bitmap File(*.bmp)|*.bmp|" +

"Gif File(*.gif)|*.gif|" +

"JPEG File(*.jpg)|*.jpg|" +

"PNG File(*.png)|*.png" ;

saveDlg.ShowHelp = true;

//如果選擇,則進行保存

if(saveDlg.ShowDialog() == DialogResult.OK)

...{

//得到用戶選擇的文件名

string fileName = saveDlg.FileName;

//得到文件擴展名

string strFilExtn =fileName.Remove(0,fileName.Length - 3);

//保存文件

switch(strFilExtn)

...{

case "bmp":

curImage.Save(fileName, ImageFormat.Bmp);

break;

case "jpg":

curImage.Save(fileName, ImageFormat.Jpeg);

break;

case "gif":

curImage.Save(fileName, ImageFormat.Gif);

break;

case "tif":

curImage.Save(fileName, ImageFormat.Tiff);

break;

case "png":

curImage.Save(fileName, ImageFormat.Png);

break;

default:

break;

}

}

}

首先,以可接收的擴展名顯示這個保存對話框。然後,由從該對話框返回的文件名檢索相應的擴展名。最後,根據該擴展名,使用相應的圖像格式參數調用Save()方法。
接下來,我們分析菜單項mnu200Zoom相應的處理器。首先,讓我們在應用程序級添加下列以粗體顯示的一行:

private double curZoom=1.0;

private Image curImage=null;//用於存儲當前圖像

private int i = 0;//用於把屏幕重畫操作與縮略圖繪制部分區別開來

然後,必須對mnuLoad處理代碼作少許調整,如下所示:

private void mnuLoad_Click(object sender,System.EventArgs e)

...{

//創建OpenFileDialog

OpenFileDialog opnDlg = new OpenFileDialog();

//設置一個圖像類型過濾器

opnDlg.Filter =

"All Image files|*.bmp;*.gif;*.jpg;*.ico;"+

"*.emf;,*.wmf|Bitmap Files(*.bmp;*.gif;*.jpg;"+

"*.ico)|*.bmp;*.gif;*.jpg;*.ico|"+

"Meta Files(*.emf;*.wmf;*.png)|*.emf;*.wmf;*.png";

opnDlg.Title = "打開圖像文件";

opnDlg.ShowHelp = true;

//如果OK,選擇它

if(opnDlg.ShowDialog() == DialogResult.OK)

...{

//讀取當前選擇的文件名

curFileName = opnDlg.FileName;

//使用Image.FromFile創建圖像對象

try

...{

curImage = Image.FromFile(curFileName);

}

catch(Exception exp)

...{

MessageBox.Show(exp.Message);

}

}

//改變AutoScrollMinSize屬性

this.AutoScrollMinSize = new Size

((int)(curImage.Width * curZoom),

(int)(curImage.Height * curZoom));

i++;

//重新繪製表單

Invalidate();

}

注意,在此新添加的代碼分別在原來的圖像寬度和高度上乘以放大因子以生成一個放大的圖像。然後,必須相應地修改paint事件的處理器。如下所示:

private void Form1_Paint(object sender, PaintEventArgs e)

...{

if (curImage != null && i==0)

...{

Graphics g = this.CreateGraphics();

g.DrawImage(curImage, new Rectangle

(AutoScrollPosition.X,

AutoScrollPosition.Y ,

(int)(this.ClientRectangle.Width * curZoom),

(int)(ClientRectangle.Height * curZoom)));

}

}

該圖像應該有根據放大因子的相應的高度和寬度。下面,我們來看一下mnu200Zoom菜單項相應的事件處理器:

private void mnu200_Click(object sender,System.EventArgs e)

...{

if(curImage != null)

...{

curZoom = (double)200/100;

i++;

Invalidate();

}

}

最後,我們來看一下mnuThumbNail菜單項相應的事件處理器:

1private void mnuThumbnail_Click(object sender, EventArgs e)

2...{

3if(curImage != null)

4...{

5i++;

6//回調

7Image.GetThumbnailImageAbort tnCallBack =

8new Image.GetThumbnailImageAbort(tnCallbackMethod);

9//得到縮略圖圖像

10Image thumbNailImage = curImage.GetThumbnailImage

11(100, 100, tnCallBack, IntPtr.Zero);

12//創建一個Graphics對象

13Graphics tmpg = this.CreateGraphics();

14tmpg.Clear(this.BackColor);

15//畫縮略圖圖像

16tmpg.DrawImage(thumbNailImage, 10, 10, thumbNailImage.Width, thumbNailImage.Height);

17//釋放掉Graphics對象

18tmpg.Dispose();

19}

20

21}

22

在此,我們首先創建一個GetThumbnailImageAbort類型的變數並且賦給它值tnCallbackMethod()—這是通過傳遞給該方法GetThumbnailImageAbort實現的。然後,它創建一個新的Image類的實例以存儲GetThumbnailImage方法返回的圖像—此後,這個方法將用於把縮略圖繪制到屏幕上。
四、小結
在本文中,我僅討論了.NET C#環境下關於GDI+編程的一些基本的實用操作片斷。在以後的文章中,我們將逐漸展開對.NET GDI+編程高級特徵的探討。

Ⅸ 請教該怎麼使用GDI+控制項

創建自定義控制項的3種主要實現方式:
1)繼承已有的控制項來實現自定義控制項: 主要是當要實現的控制項和已有的控制項在很多方面比較類似, 通過對已有控制項的擴展來滿足要求。
2)通過繼承一個布局文件實現自定義控制項,一般來說做組合控制項時可以通過這個方式來實現。
注意此時不用onDraw方法,在構造廣告中通過inflater載入自定義控制項的布局文件,再addView(view),自定義控制項的圖形界面就載入進來了。
3)通過繼承view類來實現自定義控制項,使用GDI繪制出組件界面,一般無法通過上述兩種方式來實現時用該方式。

閱讀全文

與gdi的基本使用方法相關的資料

熱點內容
lol手游跳fps嚴重解決方法 瀏覽:376
塑料薄膜吸水率檢測方法 瀏覽:662
植物中葯的鑒別方法 瀏覽:143
如何練習口才方法 瀏覽:409
裸色隔離霜的正確使用方法 瀏覽:771
玻璃水種真假的鑒別方法 瀏覽:599
識字教學方法幼小銜接 瀏覽:826
論文類似於swot的分析方法 瀏覽:964
小腦病變怎樣治療方法 瀏覽:296
自我檢測五官的方法 瀏覽:758
宮燈圖片製作方法 瀏覽:688
油菜花的種植方法和功效 瀏覽:682
用什麼方法可以讓魚到水面吃食 瀏覽:702
戴口罩正確方法 瀏覽:488
iqoo手機網路卡頓嚴重解決方法 瀏覽:204
安裝障礙物的方法 瀏覽:332
硬碟在電腦里的使用方法 瀏覽:957
手機臂帶使用方法 瀏覽:835
櫥櫃門板測量方法 瀏覽:159
通氣還有哪些方法 瀏覽:732