VB 用Image控件装载图片后,如何截取?
由于要写一个比较大型的程序,界面上会有好多图标(50多个),如果全部弄成一个一个文件就显得不够专业,我看到有一些程序界面上的图标都放在一个BMP图片文件里面(每个图标的大小相同12x12),然后由程序去控制截取每个图片.
不知道VB能不能实现这样的效果,上次问了一个高手说是用Image控件装载图片后,进行截取.但是没有具体说怎么做,请各位老师指点.
补充说明:
例如下面就是一个BMP文件,里面有七个图标,我如何用程序进行截取每一个并按顺序进行编号,第一个是1,第二个是2,3,4,5,6.....供程序内部使用.
[解决办法]
Option ExplicitPrivate m_Index As LongPrivate Sub Command1_Click() Set Image1.Picture = ImageList1.ListImages(m_Index + 1).Picture m_Index = (m_Index + 1) Mod 7End SubPrivate Sub Form_Load() Dim pic As IPictureDisp, i As Long Picture1.BorderStyle = vbBSNone Picture1.ScaleMode = vbPixels Picture1.AutoRedraw = True Picture1.Move 0, 0, ScaleX(64, vbPixels, vbTwips), ScaleX(64, vbPixels, vbTwips) Set pic = LoadPicture("C:\1.bmp") Debug.Print pic.Width For i = 0 To 6 Picture1.Cls Picture1.PaintPicture pic, 0, 0, , , i * 64, 0 ImageList1.ListImages.Add , , Picture1.Image Next Picture1.Visible = False Call Command1_ClickEnd Sub
[解决办法]
'截取BMP文件里的包含的图标代码如下,只需要注意两点,一是坐标位置的计算,二是需要透明时,得使用GIF文件。
Private Sub Command1_Click()
Dim i As Integer
Dim srcPic As StdPicture
Dim picWidth As Long, picHeight As Long, iconWidth As Long, iconHeight As Long
Me.ScaleMode = vbPixels
'调入图片文件
Set srcPic = LoadPicture("d:\2008061300095783.jpg")
picWidth = Me.ScaleX(srcPic.Width, vbHimetric)
picHeight = Me.ScaleY(srcPic.Height, vbHimetric)
iconWidth = picWidth \ 7 '因为有7个图标,故除以7
iconHeight = picHeight
'逐一显示图片文件里包括的7个图标
For i = 0 To 6
srcPic.Render Me.hDC, CLng(i * (iconWidth + 10)), CLng(10), CLng(iconWidth), _
CLng(iconHeight), CLng(i * srcPic.Width / 7), CLng(srcPic.Height), CLng(srcPic.Width / 7), _
-CLng(srcPic.Height), ByVal 0&
Next
'至于透明,用PS把JPG文件转换为GIF即可
End Sub