成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

vb.netgdi函數(shù),net vb

請問在VB中能調用windowsGDI函數(shù)么?如何調用???

和其他API一樣吧,用Declare聲明后直接用

成都創(chuàng)新互聯(lián)專注于環(huán)江企業(yè)網(wǎng)站建設,響應式網(wǎng)站開發(fā),商城網(wǎng)站制作。環(huán)江網(wǎng)站建設公司,為環(huán)江等地區(qū)提供建站服務。全流程按需制作網(wǎng)站,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務

Public Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long

Public Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

在vb.net環(huán)境下圖像處理,用什么建立3D

首先,還是談談圖像像素時數(shù)據(jù)獲取方面吧,.net中的圖像相關類基本上都是基于GDI+的,因此,圖像數(shù)據(jù)的獲取其實也是調用GDI+的一些函數(shù)。這個函數(shù)就是LockBits,在vb.net中彩色圖像數(shù)據(jù)的快速獲取 一文中,我們是調用了Marshal.Copy把LockBits鎖定的內存數(shù)據(jù)拷貝到數(shù)據(jù)中,然后對數(shù)組中的值進行處理。這樣做主要的原因是VB.NET不好直接訪問內存(Marshal.ReadByte之類的函數(shù)不適合用于大型的循環(huán)中)。那么,這就造成了2個不好的事情,第一:在同一時間需要2倍于圖像數(shù)據(jù)量的內存,第二:內存數(shù)據(jù)拷貝到數(shù)據(jù),以及處理后再把數(shù)組的數(shù)據(jù)拷貝會內存中都是會減低速度的。作為一種改進,我們應該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請內存,然后在把圖像數(shù)據(jù)按照相關格式填充如這個內存中。這樣,就可以先定義個數(shù)組,然后把圖像數(shù)據(jù)填充到這個數(shù)組中,就避免了來回拷貝的耗時了,簡單示例代碼如下:

Dim BmpData As New BitmapData

Stride = ((Bmp.Width * 3 + 3) And HFFFFFFFC)

Dim PixleValue(Stride * Bmp.Height) As Byte

Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)

BmpData.Scan0 = Hanlde.AddrOfPinnedObject()

vb.net GDI繪圖刷新問題

繪圖代碼寫在Paint事件中,如

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

Dim g As Graphics = Me.CreateGraphics

g.DrawLine(Pens.Red, 100, 100, 200, 100)

End Sub

'方法二:在 PictureBox1上顯示圖像----圖畫在Bitmap

PictureBox1.Image = Nothing

Dim wid As Integer = PictureBox1.ClientSize.Width

Dim hgt As Integer = PictureBox1.ClientSize.Height

Dim bm As New Bitmap(wid, hgt)

Dim g As Graphics = Graphics.FromImage(bm)

'畫圖代碼

'畫圖代碼

PictureBox1.Image = bm

PictureBox1.Refresh()

g.Dispose()

VB.net可以調用API嗎?怎么調用?比如我要調用Gditransparentbit函數(shù)怎么寫代

(1).使用DllImport特征類來申明Windows API函數(shù):

下面是在Visual Basic .Net中使用DllImport特征類申明二個Windows API函數(shù)的具體示例:

'函數(shù)ExtractIcon,其功能是是從指定文件的指定位置導出圖標的Windows句柄。

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _

Public Function _

ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

End Function

'函數(shù)Icon_Num,其功能是獲得指定文件中的圖標數(shù)目

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" , EntryPoint := "ExtractIcon" ) > _

Public Function _

Icon_Num ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer

End Function

在使用DllImport特征類申明Windows API函數(shù)時,如果申明的函數(shù)名稱和函數(shù)的入口點相同,則可以在申明Windows API函數(shù)時,省略定義函數(shù)入口點對應的代碼,即EntryPoint對象字段對應的代碼,這樣聲明ExtractIcon函數(shù)的代碼也可以簡化為如下所示:

< System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) > _

Public Function _

ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

End Function

(2).使用“Declare”語句來申明Windows API函數(shù):

使用“Declare”語句的確比使用DllImport特征類要簡單了許多,下面是在Visual Basic .Net中使用“Declare”語句來聲明上述二個Windows API函數(shù)的具體方法:

Declare Auto Function ExtractIcon Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

'聲明ExtractIcon函數(shù)

Declare Auto Function Icon_Num Lib "Shell32.dll" Alias "ExtractIcon" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As Integer ) As Integer

'聲明Icon_Num函數(shù)

在Visual Basic .Net中聲明Windows API函數(shù)時,“Declare”語句中Alias關鍵字的作用相當于使用DllImport特征類中的EntryPoint對象字段。同樣在使用“Declare”語句聲明Windows API函數(shù)時,如果聲明的函數(shù)和函數(shù)的入口點相同,也可以省略Alias關鍵字對應的代碼,所以ExtractIcon函數(shù)也可以簡化為如下:

Declare Auto Function ExtractIcon Lib "Shell32.dll" ( ByVal src As System.IntPtr , ByVal strFileName As string , ByVal uiIconIndex As UInt32 ) As System.IntPtr

在vb中怎樣作不規(guī)則的窗體,GDI函數(shù)都有哪些

該窗體是個矩形,但是四個角都是切圓的,實現(xiàn)代碼如下:

'首先我們先創(chuàng)建一個窗體,并將窗體的BorderStyle屬性設為0

'然后聲明API函數(shù),如下:

Private Declare Function SetWindowRgn Lib "USER32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

'我們先來了解一下這幾個函數(shù)

'函數(shù)CreateRoundRectRgn用于創(chuàng)建一個圓角矩形,該矩形由X1,Y1-X2,Y2確定,

'并由X3,Y3確定的橢圓描述圓角弧度

'CreateRoundRectRgn參數(shù) 類型及說明

'X1,Y1 Long,矩形左上角的X,Y坐標

'X2,Y2 Long,矩形右下角的X,Y坐標

'X3 Long,圓角橢圓的寬。其范圍從0(沒有圓角)到矩形寬(全圓)

'Y3 Long,圓角橢圓的高。其范圍從0(沒有圓角)到矩形高(全圓)

'SetWindowRgn用于將CreateRoundRectRgn創(chuàng)建的圓角區(qū)域賦給窗體

'DeleteObject用于將CreateRoundRectRgn創(chuàng)建的區(qū)域刪除,這是必要的,否則不必要的占用電腦內存

'接下來聲明一個全局變量,用來獲得區(qū)域句柄,如下:

Dim outrgn As Long

'然后分別在窗體Activate()事件和Unload事件中輸入以下代碼

Private Sub Form_Activate()

Call rgnform(Me, 20, 20) '調用子過程

End Sub

Private Sub Form_Unload(Cancel As Integer)

DeleteObject outrgn '將圓角區(qū)域使用的所有系統(tǒng)資源釋放

End Sub

'接下來我們開始編寫子過程

Private Sub rgnform(ByVal frmbox As Form, ByVal fw As Long, ByVal fh As Long)

Dim w As Long, h As Long

w = frmbox.ScaleX(frmbox.Width, vbTwips, vbPixels)

h = frmbox.ScaleY(frmbox.Height, vbTwips, vbPixels)

outrgn = CreateRoundRectRgn(0, 0, w, h, fw, fh)

Call SetWindowRgn(frmbox.hWnd, outrgn, True)

End Sub

'好了,程序可以直接運行了,看看效果如何,如果把Call rgnform(Me, 20, 20)中

'的20改為50又會怎樣呢?

'60呢?100呢?

'所以通過改變參數(shù)fw和fh的值就可以實現(xiàn)圓角窗體了。

網(wǎng)站題目:vb.netgdi函數(shù),net vb
分享路徑:http://jinyejixie.com/article34/hsesse.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、面包屑導航App設計、外貿建站、電子商務、服務器托管

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化