我现在刚开始做一个图像处理的程序,想把对话框上的图像暂时保存起来,计算处理完之后再画到对话框上,另外如果我想把处理的中间结果作为bmp文件保存到硬盘上,应该怎么办?      我现在是把一个个像素读进动态数组,处理完在画出来,慢得不行。谁能帮帮我?

解决方案 »

  1.   

    怎么能够将一个个像素存到动态数组中去呢,楼主很强大啊!不知道楼主能不能把代码贴出来
    我的思路是这样的:
    CBitmap bitmap;
    CDC *pDC,memDC;
    pDC=GetDC();
    memDC.CreateCopatibleDC(pDC);
    bitmap.CreateCompatibleBitmap(pDC,width,height);
    memDC.SelectObject(&bitmap);
    CDC.BitBlt(0,0,width,height(),&memDC,0,0,SRCCOPY);
    将对话框DC上的位图复制到memDC中,这个时候bitmap就能够得到对话框上的位图
     
      

  2.   

    #include<atlimage.h >
    CDC *pDC = GetWindowDC();
     CDC  memDC;
     memDC.CreateCompatibleDC(pDC)  ; 
     CRect rt;
     GetWindowRect(&rt);
     CBitmap Bmp;
     Bmp.CreateCompatibleBitmap(pDC,rt.Width(), rt.Height())  ; 
     CBitmap *pBmpPrev   =   (CBitmap*)memDC.SelectObject(&Bmp)   ;
     memDC.BitBlt(0,   0,   rt.Width(),   rt.Height(),   pDC,   0,   0,   SRCCOPY);  
     CImage image; 
     image.Attach((HBITMAP)Bmp.m_hObject);
     image.Save(L"c:\\1.bmp");
      

  3.   

    这个方法不好,慢得要命,尤其是SetPixel()下面是我的代码,功能是得到图像的水平投影,刚开始做,写的不好void CTestDlg::OnBtnLocate()   
    {
    // TODO: Add your control notification handler code here
    COLORREF color;
    CClientDC dc(this);
    BeginWaitCursor();
    HPos=new long[width/2];
    VPos=new long[height/2];// for(int i=0;i<height;i++)    //读取像素数据
    // {
    // vector<int> data;
    // for(int j=0;j<width;j++)
    // {
    //
    // BYTE num=color>>16;
    // data.push_back(num);
    // }
    // tempData.push_back(data);
    // } for(int i=0;i<width/2;i++)      //得到水平方向上的投影
    {
    HPos[i]=0;
    for(int j=0;j<height/2;j++)
    {
    color=GetPixel(dc.m_hDC,20+width/4+i,20+height/2+j);
    BYTE num=color;
    if (255==num) 
    {
    HPos[i]+=1;

    }

    }
    } dc.MoveTo(20+width/4,720);
    dc.LineTo(20+width/4+width/2,720); dc.MoveTo(1000,20+height/2);
    dc.LineTo(1000,20+height); for(int x=0;x<width/2;x++)
    {
    for(int y=0;y<HPos[x];y++)
    {
    SetPixel(dc.m_hDC,20+width/4+x,720-y,RGB(255,0,0));
    }
    } isLocated=true;
    EndWaitCursor();
    ReleaseDC(&dc);
    }
      

  4.   


    MSDN里是这么说的,但是我不知道怎么写,我想知道位图复制到bitmap里之后,怎么进行操作,比如灰度化,我想处理完之后再画到对话框上,这样速度比较快
      

  5.   

    我才看见,用CBitmap类的GetBitmapBits和SetBitmapBits方法可以读写复制的位图数据吗?
      

  6.   

    楼主看看opencv吧,很容易实现,几个函数即可完成