我对一张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数组,但是我不知道怎么将其转化成一张图表示出来!
期望各位帮帮忙啊
解决方案 »
- buffer = 0x001b8478 "试图给目录添加一个名称已在使用中的对象。 这是什么意思
- vc中关闭excel的问题
- 弱弱的问一句
- 怎么样能看到lib文件中的函数名.
- CSplitterWnd的问题,窗体生成后,当窗体变化时CSplitterWnd对象该如何改变才可以使划分出来的窗体跟着变化?
- 怎样把CListCtrl的内容存入Excel或Access?
- COM 中为什么要引入 class object(“类厂”或“类对象”)??
- 多线程加密文件(结合硬件算法引擎)如何实现。
- 不用DC,如何在位图中添加文字
- 如何深层直接退出?
- 非模式对话框中如何释放gdi对象
- 100分求教:非管理员权限下,Windows下如何通过编程实现增加、删除、修改路由
{
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);
}
http://community.csdn.net/Expert/topic/4030/4030659.xml?temp=3.292263E-03
我有一个类似的程序,有从RGB三个分量文件中读取像素之组合为一幅图片功能
如果需要留下email
只要构造fileheader,infoheader,然后把图像数据copy到余下的内存里就可以了。
注意4字节对齐。