如何在VB中直接显示无格式256灰度级图像

西门外官人

西门外官人

2016-02-19 18:09

下面请跟着图老师小编一起来了解下如何在VB中直接显示无格式256灰度级图像,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!
----在具体应用中可能会要处理无格式的图像,在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:fcgest.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:->

展开更多 50%)
分享

猜你喜欢

如何在VB中直接显示无格式256灰度级图像

编程语言 网络编程
如何在VB中直接显示无格式256灰度级图像

黑白图像的缩小灰度级显示算法的编写

编程语言 网络编程
黑白图像的缩小灰度级显示算法的编写

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

如何让工具条显示256色图像

编程语言 网络编程
如何让工具条显示256色图像

在Foxmail中直接查看HTML格式邮件

Web开发
在Foxmail中直接查看HTML格式邮件

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

如何在MySQL数据库中直接储存图片

编程语言 网络编程
如何在MySQL数据库中直接储存图片

显示“BMP”格式图像

设计软件 平面设计软件 广告设计软件
显示“BMP”格式图像

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

什么是rle

什么是rle

Skype安全吗

Skype安全吗
下拉加载更多内容 ↓