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

2016-02-19 18:09 83 1 收藏

下面请跟着图老师小编一起来了解下如何在VB中直接显示无格式256灰度级图像,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

----在具体应用中可能会要处理无格式的图像,在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:->

来源:http://www.tulaoshi.com/n/20160219/1616922.html

延伸阅读
标签: SQLServer
  declare @i int set @i=1 while @i<30 begin    insert into test (userid) values(@i)    set @i=@i+1 end  
标签: MySQL mysql数据库
如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。 本文概述:  在mysql中建立一个新的数据库  一个怎样储存文件的例子程序  一个怎样访问文件的例子程序  在mysql中建立一个新的databas...
标签: 手机软件
第一步,在“通用”选项页面,点击进入“辅助功能”。 第二步,在辅助功能页面,打开“灰度”开关,开启后整个屏幕将成为灰白色调。
Foxmail如何直接查看HTML格式邮件   在Foxmail中直接查看HTML格式邮件。 打开HTML格式的邮件,您可以看到邮件预览框右上方出现手指图标和地球图标,点击地球图标,可以切换显示邮件的文本内容或者HTML内容。 另外,通过帐户菜单进入属性对话框,选择字体与显示,选中使用嵌入式IE浏览器显示HTML邮件复选项,Foxmail将自...
    PhotoShop的图像处理功能很强,其中有一个功能是将灰度图像转换为彩色图像,数字图像处理中,也经常要遇到灰度图像与彩色图像相互转换的问题,如何自己解决这个问题,值得大家探讨,现将我解决这类问题的方法陈述如下: 工程应用中经常要遇到需要把彩色图像到灰度图像的变换的问题,采集卡过来的图像为彩色图像,为加...

经验教程

92

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部