vb.net实现抠图的简单介绍
Vb.net怎么实现图像的处理
这问题有点笼统,软糖来说说把:
成都创新互联公司长期为成百上千客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为龙陵企业提供专业的做网站、成都网站制作,龙陵网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。
图像处理由System.Drawing命名空间负责。
主要是Bitmap类和Graphics类。
Bitmap表示一个位图,可以是BMP,JPG,PNG等文件。
装载位图
Dim 位图 As Bitmap = Bitmap.FromFile("C:\Image1.PNG")
Graphics表示一张画纸,能够进行绘制操作。
它可以被窗体、控件、位图调用CreateGraphics()方法来创建。
然后调用Graphics.Draw开头的一系列函数来绘制图像和图形,Fill开头的填充图形。
创建画纸并绘制位图
Dim 画纸 As Graphics = Me.CreateGraphics()
画纸.DrawImage(位图, 100, 100, 256, 256)
可以将上面三行放到Form1_Load中测试,把路径改一下,
还可以把Me改为能在上面绘图的控件的名称。
更多内容请看MSDN的System.Drawing命名空间。
如满意,请采纳,谢谢。
vb.net调用photoshop
将photoshop TypeLibrary通过引用调用,就可以用它的函数了.强烈建议你下载photoshop6.0 sdk里面有一个vb的例子,如果你要写程序,就必须要用到他模块里面的一些声明.不过他的资料也给的很少,只可实现一些简单函数(实现基本操作),较复杂的只有自己写了(由于资料不全,比较困难)
photoshop6.0 sdk在下载,好好研究一下那个vb例子
,以后可以自己写出更多的函数
VB.Net如何实现抠图并绘图
项目中要用图形来显示一个阀门的开度,以及控制阀的开度。本来是要用什么公司买的控件中的饼图之类的实现,不过我觉得也是麻烦,就想,还是自己画吧。
首先添加一个TrackBar,名字是“TrackBar1”,一个label,名字是“L_A_SHANG”,一个GroupBox,名字是“GB_RIGHT”,,然后添加拉动滚动条时的处理函数
'上位机控制
Dim m_start As Integer
Dim RcDraw As System.Drawing.Rectangle
Private Sub TrackBar1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles TrackBar1.Scroll
m_start = (100 - TrackBar1.Value)
Me.L_A_SHANG.Text = Me.TrackBar1.Value.ToString
GB_RIGHT.Invalidate() '重画GB_RIGHT
End Sub
添加GB_RIGHT重画时的处理函数
Private Sub GB_RIGHT_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles GB_RIGHT.Paint
RcDraw.X = TrackBar1.Location.X - 40
RcDraw.Y = 20
RcDraw.Height = 100
RcDraw.Width = 20
e.Graphics.DrawRectangle(New Pen(Color.Blue, 5), RcDraw)
Dim i = TrackBar1.Location.X - 40
For i = TrackBar1.Location.X - 40 To TrackBar1.Location.X - 20
e.Graphics.DrawLine(New Pen(Color.Blue, 5), i, m_start + 20, i, 120)
Next
Me.L_A_SHANG.Text = Me.TrackBar1.Value.ToString + "%"
End Sub
到此以及可以实现拉动条的时候,图像跟着变化,并显示百分比。
怎样用VB把一张图片透明的放到Picture里,在线等
Public Function TranBlt(DestHdc As Long, X As Long, Y As Long, W As Long, H As Long, srcHdcOrBmp As Long, Optional srcX As Integer, Optional srcY As Integer, Optional srcW As Long, Optional srcH As Long, Optional tc As Long = -1, Optional IsBmp As Boolean) As Long
'srcHdcOrBmp参数 传入的可以是hdc也可以是Bmp对象的Handle,
'IsBmp参数 为真时srcHdcOrBmp代表Bmp对象的Handle,为假时代表hdc
'返回值 成功时返回透明色,不成功时返回-1
Dim tHdc(3) As MemHdc
Dim J As Long, oc As Long, I As Long, Bm As BITMAP, cc As Long, NewDc As Long
Dim sw As Long, sh As Long, sBmp As Long, sHdc As Long, obm As Long, NewX As Long, NewY As Long
If DestHdc = 0 Or srcHdcOrBmp = 0 Or W = 1 And H = 1 Then GoTo fail
If IsBmp Then '若传入的是Bmp句柄,需为其创建一个临时DC
sBmp = srcHdcOrBmp
tHdc(3) = NewMyHdc(DestHdc, 0, 0, srcHdcOrBmp)
sHdc = tHdc(3).hdc
Else
sHdc = srcHdcOrBmp
If srcW = 0 Then sBmp = GetCurrentObject(sHdc, 7)
End If
If sHdc = 0 Or sBmp = 0 Then GoTo fail
If srcW = 0 Then '若没有提供源图大小,需取得整个源图大小
GetObj sBmp, Len(Bm), Bm
sw = Bm.bmWidth - srcX
sh = Bm.bmHeight - srcY
Else
sw = srcW
sh = srcH
End If
If sw 1 Or sh 1 Then GoTo fail
If tc = -1 Then
cc = GetPixel(sHdc, srcX, srcY) '将左上角第一个像素作为源图背景色,用于透明
Else
cc = tc
End If
If W sw Or H sh Then
tHdc(2) = NewMyHdc(DestHdc, W, H)
StretchBlt tHdc(2).hdc, 0, 0, W, H, sHdc, srcX, srcY, sw, sh, vbSrcCopy
'先将源图缩放,下面步骤就一样了。
NewDc = tHdc(2).hdc
Else
NewDc = sHdc
NewX = srcX
NewY = srcY
End If
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert
'将源图先反色(XOR)绘入目标图,若源图背景为黑色,此步可省
'下面是制作Mask图的方法
I = CreateBitmap(W, H, 1, 1, ByVal 0) '建立单色位图
tHdc(0) = NewMyHdc(DestHdc, 0, 0, I) '为单色图建立新DC,并选入
tHdc(1) = NewMyHdc(DestHdc, W, H) '另建一个彩色图及DC,用于存放Mask图
oc = SetBkColor(NewDc, cc) '将源图背景色改为透明色
BitBlt tHdc(0).hdc, 0, 0, W, H, NewDc, NewX, NewY, vbSrcCopy
'先将源图绘入单色DC,由此产生只有正反的Mask图,背景色(透明色)为黑,其它为白
SetBkColor NewDc, oc '恢复源图背景色,不是必须的,但这是个好习惯。
BitBlt tHdc(1).hdc, 0, 0, W, H, tHdc(0).hdc, 0, 0, vbSrcCopy
'单色DC必须复制进彩色DC才能进行后面的的AND运算
'Mask图完成,并已放入彩色DC
BitBlt DestHdc, X, Y, W, H, tHdc(1).hdc, 0, 0, vbSrcAnd '标准透明绘图:选将Mask图用And运算绘入,
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert '再将源图以反色(XOR)绘入一次
DelMyHdc tHdc(0)
DelMyHdc tHdc(1)
If tHdc(2).hdc 0 Then DelMyHdc tHdc(2)
If tHdc(3).hdc 0 Then DelMyHdc tHdc(3)
TranBlt = cc
Exit Function
fail:
If tHdc(3).hdc 0 Then DelMyHdc tHdc(3)
TranBlt = -1
End Function
Private Function NewMyHdc(dHdc As Long, W As Long, H As Long, Optional Bm As Long) As MemHdc
With NewMyHdc
.hdc = CreateCompatibleDC(dHdc)
If Bm = 0 Then
.Bmp = CreateCompatibleBitmap(dHdc, W, H)
Else
.Bmp = Bm
End If
.obm = SelectObject(.hdc, .Bmp)
End With
End Function
Private Function DelMyHdc(MyHdc As MemHdc, Optional nobmp As Boolean) As MemHdc
With MyHdc
If .hdc 0 And .obm 0 Then SelectObject .hdc, .obm
If nobmp = False And .Bmp 0 Then DeleteObject .Bmp
If .hdc 0 Then DeleteDC .hdc
End With
End Function
把这个函数放在一个BAS里,然后在窗体里
TranBlt pic.hdc, X,Y,W,H,PIC2.Picture.Handle, _
TX,TY,TW,TH, , True
就OK
网站栏目:vb.net实现抠图的简单介绍
网页路径:http://azwzsj.com/article/dojjsde.html