
VB关于图片和变量的问题
有个图片,地址是:c:\pic.bmp,我想把这个图片读进一个变量中,然后再切分成平均3*3的9份放在另一个变量数组中,最后在显示在9个ImageBox里,请问怎么做到。...
有个图片,地址是:c:\pic.bmp ,我想把这个图片读进一个变量中,然后再切分成平均3*3的9份放在另一个变量数组中,最后在显示在9个ImageBox里,请问怎么做到。
我知道上面的方法比较麻烦,也许你会告诉我关于PictureClip控件的方法,我都不想要,我想要的这样操作的一些方法
1.图片存在变量中,该变量声明成什么类型?
2.怎么给这个变量赋值?
3.怎么在含有图片的变量中就把变量给切割了?
4.显示的时候难道直接image1.picture=loadpictrue(变量)?
最后,非常谢谢您的回答 展开
我知道上面的方法比较麻烦,也许你会告诉我关于PictureClip控件的方法,我都不想要,我想要的这样操作的一些方法
1.图片存在变量中,该变量声明成什么类型?
2.怎么给这个变量赋值?
3.怎么在含有图片的变量中就把变量给切割了?
4.显示的时候难道直接image1.picture=loadpictrue(变量)?
最后,非常谢谢您的回答 展开
4个回答
展开全部
用类呀
定义一个图片处理类
这个问题太容易了
我这有
这是读取BMP文件的部分
Public Function LoadBmp(Optional ByVal szfileName As String) As Boolean
If Dir$(szfileName, vbArchive Or vbNormal Or vbHidden Or vbSystem Or vbReadOnly) = "" Then
LoadBmp = False
Exit Function
End If
Dim hfilenum As Long
If Not CreateFileNumber(hfilenum) Then
LoadBmp = False
Exit Function
End If
Dim bfh(0 To 13) As Byte
Dim dibinfo As BITMAPINFOHEADER
Open szfileName For Binary Access Read As #hfilenum
Get #hfilenum, 1, bfh
If bfh(0) <> 66 Or bfh(1) <> 77 Then 'BM
Close #hfilenum
LoadBmp = False
Exit Function
End If
Get #hfilenum, , dibinfo
If (dibinfo.biBitCount < 24) Then
Close #hfilenum
LoadBmp = False
Exit Function
End If
On Error GoTo ReadBmp_Err
If CreateDIB(dibinfo.biWidth, dibinfo.biHeight, dibinfo.biBitCount) Then
ReDim bbuffer(0 To m_MyLineByteWidth * dibinfo.biHeight) As Byte
Get #hfilenum, , bbuffer
Close #hfilenum
CopyMemory ByVal m_MyBuffer, bbuffer(0), m_MyLineByteWidth * dibinfo.biHeight
Erase bbuffer
LoadBmp = True
Exit Function
Else
Close #hfilenum
LoadBmp = False
Exit Function
End If
ReadBmp_Err:
Close #hfilenum
LoadBmp = False
End Function
定义一个图片处理类
这个问题太容易了
我这有
这是读取BMP文件的部分
Public Function LoadBmp(Optional ByVal szfileName As String) As Boolean
If Dir$(szfileName, vbArchive Or vbNormal Or vbHidden Or vbSystem Or vbReadOnly) = "" Then
LoadBmp = False
Exit Function
End If
Dim hfilenum As Long
If Not CreateFileNumber(hfilenum) Then
LoadBmp = False
Exit Function
End If
Dim bfh(0 To 13) As Byte
Dim dibinfo As BITMAPINFOHEADER
Open szfileName For Binary Access Read As #hfilenum
Get #hfilenum, 1, bfh
If bfh(0) <> 66 Or bfh(1) <> 77 Then 'BM
Close #hfilenum
LoadBmp = False
Exit Function
End If
Get #hfilenum, , dibinfo
If (dibinfo.biBitCount < 24) Then
Close #hfilenum
LoadBmp = False
Exit Function
End If
On Error GoTo ReadBmp_Err
If CreateDIB(dibinfo.biWidth, dibinfo.biHeight, dibinfo.biBitCount) Then
ReDim bbuffer(0 To m_MyLineByteWidth * dibinfo.biHeight) As Byte
Get #hfilenum, , bbuffer
Close #hfilenum
CopyMemory ByVal m_MyBuffer, bbuffer(0), m_MyLineByteWidth * dibinfo.biHeight
Erase bbuffer
LoadBmp = True
Exit Function
Else
Close #hfilenum
LoadBmp = False
Exit Function
End If
ReadBmp_Err:
Close #hfilenum
LoadBmp = False
End Function
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
展开全部
Private Sub Command1_Click()
Dim Pm(197, 149) As Long
For i = 1 To 197
For j = 1 To 149
Pm(i, j) = Picture1.Point(i, j)
Next j
Next i
For i = 1 To 56
For j = 1 To 76
Picture2.PSet (i, j), Pm(i, j)
Picture3.PSet (i, j), Pm(i + 76, j)
Picture4.PSet (i, j), Pm(i, j + 56)
Picture5.PSet (i, j), Pm(i + 76, j + 56)
Next j
Next i
End Sub
这里给解释下,这个是采用VB自带的函数,如果大图片绝对不合适,必须用API函数或者DX函数来实现。
前提:有5个Picture,并且他的属性必须是像素:ScaleMode=3 - Pixel 这个要设置。
第一个插入图片,然后看大小,里面ScaleHeight 和 ScaleWidth 是高和宽,这个是大小,定义数组,大小按照这个定义。
二,然后读取点,并且把点的颜色存储到叔组中。
三,对应其他四个图片框Pciture2-5对应他们的坐标开始分配点颜色,用Pset函数。Pset的用法是:控件.Pset (X坐标,Y坐标,颜色)这个颜色可以是整数,也可以是十六进位数。
四,分配过后,就显示出来了,这个原理就是按点拆分图片,按点分配图片。
Dim Pm(197, 149) As Long
For i = 1 To 197
For j = 1 To 149
Pm(i, j) = Picture1.Point(i, j)
Next j
Next i
For i = 1 To 56
For j = 1 To 76
Picture2.PSet (i, j), Pm(i, j)
Picture3.PSet (i, j), Pm(i + 76, j)
Picture4.PSet (i, j), Pm(i, j + 56)
Picture5.PSet (i, j), Pm(i + 76, j + 56)
Next j
Next i
End Sub
这里给解释下,这个是采用VB自带的函数,如果大图片绝对不合适,必须用API函数或者DX函数来实现。
前提:有5个Picture,并且他的属性必须是像素:ScaleMode=3 - Pixel 这个要设置。
第一个插入图片,然后看大小,里面ScaleHeight 和 ScaleWidth 是高和宽,这个是大小,定义数组,大小按照这个定义。
二,然后读取点,并且把点的颜色存储到叔组中。
三,对应其他四个图片框Pciture2-5对应他们的坐标开始分配点颜色,用Pset函数。Pset的用法是:控件.Pset (X坐标,Y坐标,颜色)这个颜色可以是整数,也可以是十六进位数。
四,分配过后,就显示出来了,这个原理就是按点拆分图片,按点分配图片。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把图相放到Image1里
picture是数给控件0到8
一次排好三行三列
一个Command就OK了,试试吧,我成功了:)
Private Sub Command1_Click()
Form1.ScaleMode = 6
Dim s As Picture
Set s = Image1.Picture
mW = s.Width / 300
mh = s.Height / 300
For Index = 0 To 2
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, Index * mW, 0, mW, mh
Next
For Index = 3 To 5
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, (Index - 3) * mW, mh, mW, mh
Next
For Index = 6 To 8
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, (Index - 6) * mW, 2 * mh, mW, mh
Next
End Sub
picture是数给控件0到8
一次排好三行三列
一个Command就OK了,试试吧,我成功了:)
Private Sub Command1_Click()
Form1.ScaleMode = 6
Dim s As Picture
Set s = Image1.Picture
mW = s.Width / 300
mh = s.Height / 300
For Index = 0 To 2
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, Index * mW, 0, mW, mh
Next
For Index = 3 To 5
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, (Index - 3) * mW, mh, mW, mh
Next
For Index = 6 To 8
Picture1(Index).ScaleMode = 6
Picture1(Index).PaintPicture Image1.Picture, 0, 0, Picture1(Index).Width, Picture1(Index).Height, (Index - 6) * mW, 2 * mh, mW, mh
Next
End Sub
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询