欢迎光临
我们一直在努力

如何在vb中直接显示无格式256灰度级图像_visualbasic教程

建站超值云服务器,限时71元/月

—-在具体应用中可能会要处理无格式的图像,在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=&HCC0020dest=source
GlobalConstsrcand=&H8800C6dest=sourceanddest
GlobalConstsrcor=&HEE0086dest=sourceordest
PublicConstCOLORONCOLOR=3
PublicConstDIB_RGB_COLORS=0colortableinRGBs
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
CloseClosethefile

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:->

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 如何在vb中直接显示无格式256灰度级图像_visualbasic教程
分享到: 更多 (0)