首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

已知单色位图的内容数组,怎么在picturebox中显示

2012-01-16 
已知单色位图的内容数组,如何在picturebox中显示请教各位前辈,我需打开传真图,要编一个小软件。传真图是无

已知单色位图的内容数组,如何在picturebox中显示
请教各位前辈,我需打开传真图,要编一个小软件。传真图是无文件头的黑白单色位图。已知图的宽度就固定的,1728像素,216字节,高度我用filelen(filepath)/216来获得。传真图的内容我用open filepath for binary来获得,用get #1,,fax_buffer保存在数组中。另外,我定义了bmp_file_header和bmp_info_header,颜色数组我就定义了2组,一组RGB都是255,另一组都是0.
做完以上,我就不会了。我的目的就是要它显示在一个picturebox中,并缩放(应该只要缩,因为原图尺寸较大)以适合控件大小。
请问用VB如何实现?

另外,我想加两个按钮,一个改变显示颜色,一个放大到原尺寸。改颜色我想只要该一组RGB在0-255之间就行了,可对?放大就不知怎么做了,因为连显示我都做不出来

[解决办法]
picturebox1.PSet(x,y),Color
picturebox1.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode
[解决办法]
既然是一个固定了宽度和指定只有黑白两色的位图,那你就可以按描点的方法把它输出到picture控件上,
不知道这一步楼主是否已经做到??

至于描点用什么颜色,如何将已经描好的图像缩放,就用3楼的2个方法就行了.
[解决办法]
看了楼上两位的误导,哎,忍不住还是回答下。

如果你有了图像的数据,又有了图像的位深和高度,要实现图像可以借助于以下几个函数:
StretchDIBits 
SetDIBitsToDevice
SetDIBits 

而你要能够缩放图像,选StretchDIBits 最为合适。

要显示黑白单色位图,其实也就是设置好文件头的调色板信息就可以了,改变显示颜色也只要改变调色板里的颜色。
[code=VB][/code]

Private Const BI_RGB = 0&
Private Const DIB_RGB_COLORS = 0

Private Type BITMAPINFOHEADER
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type

Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors(1) As Long
End Type

Private Declare Function StretchDIBits Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal wSrcWidth As Long, ByVal wSrcHeight As Long, lpBits As Any, lpBitsInfo As BITMAPINFO, ByVal wUsage As Long, ByVal dwRop As Long) As Long

Dim ImageData(216 * 300& - 1) As Byte '模拟你的图像数据

Private Sub Command1_Click()
ShowBitmap Me.hdc, 100, 200, RGB(255, 255, 0), RGB(255, 0, 255)
End Sub

Private Sub Form_Load()
Dim Index As Long
For Index = 0 To 216 * 300& - 1
ImageData(Index) = Rnd * 255 '这里是模拟你的图像数据,我假定图像高度是300像素
Next
End Sub

'NewWidth是你要显示出来图像的宽度
'ColorOne是其中的一种颜色,你可以自行设置
Private Function ShowBitmap(hdc As Long, NewWidth As Long, NewHeight As Long, Optional ColorOne As Long = vbBlack, Optional ColorTwo As Long = vbWhite) As Boolean
Dim BmpInfo As BITMAPINFO
With BmpInfo.bmiHeader
.biBitCount = 1
.biCompression = BI_RGB
.biPlanes = 1
.biSize = Len(BmpInfo.bmiHeader)
.biWidth = 216
.biHeight = 300
End With
BmpInfo.bmiColors(0) = ColorOne
BmpInfo.bmiColors(1) = ColorTwo
StretchDIBits hdc, 0, 0, NewWidth, NewHeight, 0, 0, 216, 300, ImageData(0), BmpInfo, DIB_RGB_COLORS, vbSrcCopy
End Function

zhao4zhong1的pset方法会害死你,让你无法忍受速度,并且单色位图的字节拆分也比较复杂。

热点排行