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