添加收藏
 系统管理
 联系方式
  汉南在线程序设计VB程序

如何在VB中直接显示无格式256灰度级图像
作  者:匿名
关键字:VisualBasic实例



----在具体应用中可能会要处理无格式的图像,在VB中可利用API函数SetDIBitsToDevice实现这一功能.下面是我在工作中用到的显示256X256大小,256灰度级图像的程序.

DeclareFunctionGlobalAllocLib"kernel32"(ByValwFlagsAsLong,ByValdwBytesAsLong)AsLong
DeclareFunctionGlobalLockLib"kernel32"(ByValhMemAsLong)AsLong
DeclareFunctionGlobalUnlockLib"kernel32"(ByValhMemAsLong)AsLong
DeclareFunctionGlobalFreeLib"kernel32"(ByValhMemAsLong)AsLong

DeclareFunctionDeleteDCLib"gdi32"(ByValHDCAsLong)AsLong
DeclareFunctionDeleteObjectLib"gdi32"(ByValhObjectAsLong)AsLong

DeclareFunctionSetDIBitsToDeviceLib"gdi32"(ByValHDCAsLong,ByValxAsLong,ByValyAsLong,ByValdxAsLong,ByValdyAsLong,ByValSrcXAsLong,ByValSrcYAsLong,ByValScanAsLong,ByValNumScansAsLong,BitsAsAny,BitsInfoAsBITMAPINFO,ByValwUsageAsLong)AsLong

Typergbquad
rgbBlueAsByte
rgbGreenAsByte
rgbRedAsByte
rgbReservedAsByte
EndType

TypePALETTEENTRY
peRedAsByte
peGreenAsByte
peBlueAsByte
peFlagsAsByte
EndType

TypeBITMAPFILEHEADER
bfTypeAsInteger
bfSizeAsLong
bfReserved1AsInteger
bfReserved2AsInteger
bfOffBitsAsLong
EndType

TypeBITMAPINFOHEADER
biSizeAsLong
biWidthAsLong
biHeightAsLong
biPlanesAsInteger
biBitCountAsInteger
biCompressionAsLong
biSizeImageAsLong
biXPelsPerMeterAsLong
biYPelsPerMeterAsLong
biClrUsedAsLong
biClrImportantAsLong
EndType

TypeBITMAPINFO
bmiHeaderAsBITMAPINFOHEADER
bmiColors(0To255)Asrgbquad
EndType

GlobalConstSRCCOPY=&HCC0020'dest=source
GlobalConstsrcand=&H8800C6'dest=sourceanddest
GlobalConstsrcor=&HEE0086'dest=sourceordest
PublicConstCOLORONCOLOR=3
PublicConstDIB_RGB_COLORS=0'colortableinRGBs
PublicConstDIB_PAL_COLORS=1'
colortableinpaletteindices
GlobalConstGMEM_MOVEABLE=&H2

'--------以上为定义部分,可放在一个BAS文件中--------

DimxAsLong,iiAsInteger
Dimw1AsLong,h1AsLong
Dimbitmapinfo_hAsBITMAPINFOHEADER,
bitmapfile_hAsBITMAPFILEHEADER
DimlpInitInfoAsBITMAPINFO
Dimt_rgbquad(0To255)Asrgbquad
DimpLogPalAsLOGPALETTE
DimlengAsLong
Dimt_buf()AsByte'图像数据buffer

OnErrorGoToError_process
'Setuperrorhandler.
'Openthefile
pfile1$="c:\fcg\test.d"
'test.d为256X256大小,256灰度级的无格式图像文件
fd=FreeFile
w1=256'图像宽度
h1=256'图像高度
leng=w1*h1
ReDimt_buf(leng)AsByte

Openpfile1$ForBinaryAs#fd
Get#fd,,t_buf
Close'Closethefile

leng=w1*h1

bitmapfile_h.bfType=19778'"BM"
bitmapfile_h.bfSize=1078 h1*w1
bitmapfile_h.bfReserved1=0
bitmapfile_h.bfReserved2=0
bitmapfile_h.bfOffBits=1078

bitmapinfo_h.biSize=40
bitmapinfo_h.biWidth=w1
bitmapinfo_h.biHeight=h1
bitmapinfo_h.biPlanes=1
bitmapinfo_h.biBitCount=8
bitmapinfo_h.biCompression=0
bitmapinfo_h.biSizeImage=0
bitmapinfo_h.biXPelsPerMeter=0
bitmapinfo_h.biYPelsPerMeter=0
bitmapinfo_h.biClrUsed=256
Forii=0To255'设置色表为256灰度
t_rgbquad(ii).rgbBlue=CByte(ii)
t_rgbquad(ii).rgbGreen=CByte(ii)
t_rgbquad(ii).rgbRed=CByte(ii)
't_rgbquad.rgbReserved=0
Nextii

lpInitInfo.bmiHeader=bitmapinfo_h

Forii=0To255
lpInitInfo.bmiColors(ii)=t_rgbquad(ii)
Nextii

'picture1为一个picture控件,
用于显示无格式256灰度级图像
x=SetDIBitsToDevice(picture1.HDC,0,0,
w1,h1,0,0,0,h1,t_buf(0),lpInitInfo,
0)'显示图像
x=GlobalUnlock(hPal)'释放资源
x=GlobalFree(hPal)
GoToNormal_exit
Error_process:
Msgbox"程序运行出错!"
Normal_exit:->



来源:网络
阅读:594
日期:2008-1-2

【 双击滚屏 】 【 推荐朋友 】 【 收藏 】 【 打印 】 【 关闭 】 【 字体: 】 
上一篇:用VisualBasic也可以实现P2P
下一篇:页面锁定--多客户环境下VB数据库编程之(5)

  >> 相关文章
 
  ·用VisualBasic也可以实现P2P
  ·VB应用程序中实现“查找和替换”功能
  ·记录集锁定--多客户环境下VB数据库编程之(4)
  ·VB5.0中基于桌面的屏幕技巧
  ·无框窗体移动最简法(程序)
  ·用VB制作文件下载程序
  ·页面锁定的锁定方案--多客户环境下VB数据库编程之(7)
  ·VB中任意旋转位图的实现

5.12汶川大地震遇难同胞默哀 | 汉南在线总站 | 网站建设 | BT电影下载 | 汉南在线博客 | 流行购商城

授权使用:汉南在线 http://hnzx.hzwz.net/
经营许可证:陕ICP备05000109号 Powered by:汉南在线  
Copyright (c) 2002-2008 汉南在线. All Rights Reserved .