我对一张24位BMP图像进行了优化,得到了3个保存有其RGB值的数组,数组类型为FLOAT型,但是我不知道该如何将其还原为一张图像,并且显示出来。这个问题也行对你很简单,但是对我很难,所以在此请求各位大大帮个忙,谢谢了这是读图的,然后我将它转化后保存在分别存储R,G,B值的3个数组里头,数组类型为FLOAT。void CTestView::OnDraw(CDC* pDC)
{
BeginWaitCursor();
m_dibResource.UsePalette(pDC); // should be in palette
m_dibFile.UsePalette(pDC);     //  message handlers, not here
pDC->TextOut(0, 0,
"Click the left mouse button here to load a file.");
CSize sizeResourceDib = m_dibResource.GetDimensions();
sizeResourceDib.cx *= 30;
sizeResourceDib.cy *= -30;
m_dibResource.Draw(pDC, CPoint(0, -800), sizeResourceDib);
CSize sizeFileDib = m_dibFile.GetDimensions();
sizeFileDib.cx *= 30;
sizeFileDib.cy *= -30;
m_dibFile.Draw(pDC, CPoint(1800, -800), sizeFileDib);
EndWaitCursor();
}void CTestView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal(30000, 40000); // 30-by-40 cm
CSize sizeLine = CSize(sizeTotal.cx / 100, sizeTotal.cy / 100);
SetScrollSizes(MM_HIMETRIC, sizeTotal, sizeTotal, sizeLine);
CClientDC dc(this);
TRACE("bits per pixel  = %d\n", dc.GetDeviceCaps(BITSPIXEL));
}接下来这个是我对上面获得的3个数组进行直方图均衡化的过程
void CTestView::Zhifangtu(float n[])
{
// 各分量中i灰度级出现的概率
float ps[256] ;
DWORD m_dwFileLen = pBitmap.GetSize();
for (int i=0;i<256;i++)
{   
//ps[i]=0;
ps[i]=n[i]/((m_dwFileLen-54)/3.0f); 
}
//各灰度级的累计直方图分布: 
    float temp[256] ;
    for (int j=0;j<256;j++)

temp[0]=ps[0];
temp[j]=temp[j-1]+ps[j];

//对其进行取整以得出源和目标图像灰度之间的映射关系
n[j]=(int)(255.0f*temp[j]+0.5f); 
}}得到经过处理的R,G,B数组,但是我不知道怎么将其转化成一张图表示出来!
期望各位帮帮忙啊

解决方案 »

  1.   

    这是处理过程,刚才漏了void CTestView::dataimprove()
     {
     LPRGBQUAD pRGBTable = pBitmap.GetRGB();
    UINT numberOfColors = pBitmap.GetNumberOfColors();
    for(UINT x=0; x<numberOfColors; ++x)
    {
    ns_r[x] =
    pRGBTable[x].rgbRed;

    ns_g[x] =
    pRGBTable[x].rgbGreen;

    ns_b[x] =
    pRGBTable[x].rgbBlue;

    // palette.aEntries[x].peFlags = 0;
    }
           CTestView::Med(ns_r);
    CTestView::Med(ns_g);
    CTestView::Med(ns_b);
       /******************  直方图均衡化代码****************************/
            CTestView::Zhifangtu(ns_r);
    CTestView::Zhifangtu(ns_g);
    CTestView::Zhifangtu(ns_b); //显示处理后的图像
    //刷新屏幕
    CDC *pDC=GetDC();
    CRect rect(0,0,1000,1000);
    CBrush brush(RGB(255,255,255));
    pDC->FillRect(&rect,&brush);
     }
      

  2.   

    你可以看看这个
    http://community.csdn.net/Expert/topic/4030/4030659.xml?temp=3.292263E-03
    我有一个类似的程序,有从RGB三个分量文件中读取像素之组合为一幅图片功能
    如果需要留下email
      

  3.   

    在google上使用 dibtoddb 作为搜索条件,你可以找到很多很多
      

  4.   

    倒也不是很难。
    只要构造fileheader,infoheader,然后把图像数据copy到余下的内存里就可以了。
    注意4字节对齐。
      

  5.   

    liuyan4794(青牛)大侠,我想要您的从RGB数组显示位图的代码。请发到[email protected]