用VB写高效的图像处理程序 1.0β一文太棒啦,不过显示没问题了,我要读取现有图片进行运算处理该怎么做呢?
使用GetPixel必须先把图片放到picturebox控件中然后在读出需要的像素点的rgb,感觉十分有问题,有什么更好些的方法吗?比如替代GetPixel的api,或者不需要picturebox控件,直接从文件中读出?

解决方案 »

  1.   

    1.GetDIBits
    2.利用DIBSection,可以直接用BitBlt赋值
      

  2.   

    GetDIBits 原型定义: 
    int GetDIBits(
      HDC hDC,           // handle to device context
      HBITMAP hbmp,      // handle to bitmap
      UINT uStartScan,   // first scan line to set in destination bitmap
      UINT cScanLines,   // number of scan lines to copy
      LPVOID lpvBits,    // address of array for bitmap bits
      LPBITMAPINFO lpbmi,// address of structure with bitmap data
      UINT uUsage        // RGB or palette index
    ); 
    VB声明:  
    Declare Function GetDIBits Lib "gdi32" (ByVal hDC As Long, ByVal hbmp As Long, ByVal uStartScan As Long, ByVal cScanLines As Long, lpvBits As Any, lpbmi As Any, ByVal uUsage As Long) As Long 
    说明: 
    该函数利用申请到的内存,由GDI位图得到DIB位图数据。通过该函数,可以对DIB的格式进行控制,可以制定颜色的位数,而且可以指定是否进行压缩。如果采用了压缩方式,则必须调用该函数两次,一次为了得到所需内存,另外一次为了得到位图数据 
    返回值: 
    执行成功则返回扫描线的数量,零表示失败。会设置GetLastError 
    参数: 
    hDC 定义了与设备有关位图hBitmap的配置信息的一个设备场景的句柄 
    hbmp 源位图的句柄 
    uStartScan 欲复制到DIB中的第一条扫描线的编号 
    cScanLines 欲复制的扫描线数量 
    lpvBits 指向一个缓冲区的指针。这个缓冲区包含了以DIB格式描述的位图数据;这种格式是由lpbmi指定的 
    lpbmi 指向BITMAPINFO(为兼容BMP4/5而声明成Any).对DIB的格式及颜色进行说明的一个结构。在BITMAPINFOHEADER结构中,从biSize到biCompression之间的所有字段都必须初始化 
    uUsage DIB_PAL_COLORS 颜色表是一个整数数组,其中包含了与目前选入hDC设备场景的调色板相关的索引 
    DIB_RGB_COLORS 颜色表包含了RGB颜色 
     
      

  3.   

    我现在用DIBSection,专门将它封装成了CDIB类
    至于文件读写,基本上放弃了VB的LoadPicture(只有jpg的让它读)
    是自己根据图像文件格式写读写程序
    http://www.fantasiasoft.net/zyl910/zSaveGIF.zip
    以前为ThirdApple写的GIF读写程序,用到了GetDIBits
    http://www.fantasiasoft.net/Zyl910/DIBClass.zip
    正在写的图像处理基础模块
    对GIF全面支持(zSaveGIF只支持8位的,而DIBClass还支持1~7位)
    现在正在写PCX读写模块(PCX读取部分已经写好,帮忙测试一下)
      

  4.   

    http://expert.csdn.net/Expert/topic/2130/2130664.xml?temp=.1038629主  题:  DIB处理的问题,可能很菜(解决问题就结分) 
    作  者:  boyzhang (张郎)  
    等  级:    
    信 誉 值:  100 
    所属论坛:  VB API 
    问题点数:  50 
    回复次数:  9 
    发表时间:  2003-8-10 21:10:23 
     已经得到了一个设备的Hdc,怎么才能对其进行DIB处理呢?就是说,怎么才能把HDC中的内容复制到二进制数组中呢?哎,这两天看ZYL910的例子头都看大了,他的例子太复杂了不好看懂,那篇用VB写高效的图像处理程序中的例子ImgTest又没有涉及这些内容,刚接触这方面的知识,还望大家多多帮助哟!
      

  5.   

    谁支持我?
    http://expert.csdn.net/Expert/topic/2139/2139708.xml?temp=.9661524
    主  题:  ▁▂▃▄▅▆▇█ 申请在VB区增加“数字图像与图形处理/多媒体/文件格式”版 ▆▅▄▃▂▁ 
    作  者:  zyl910 (910:分儿,我又来了!)  
    等  级:    
    信 誉 值:  99 
    所属论坛:  社区支持 新版申请 
    问题点数:  300 
    回复次数:  1 
    发表时间:  2003-08-13 07:39:44 
     申请在VB区增加“数字图像与图形处理/多媒体/文件格式”版VB区关于这方面的帖子还是有很多的
    而且 我(zyl910) 和 thirdapple(陨落雕) 都能回答问题