读书人

一种基于矩形块的色彩渲染方式实现二维

发布时间: 2012-12-27 10:17:10 作者: rapoo

一种基于矩形块的颜色渲染方式实现二维数据可视化

在工程实践中,我们有时候需要将二维数据通过颜色渐变或明暗的方法表现。比如,数据Data[W][H],在XOY平面内使用颜色渐变或明暗表示数据值的变化;使用过matlab的朋友都知道imagesc函数,可以将一组二维数据通过图像的方式表现出来。

以下是我采用渲染矩形块的办法实现的imagesc函数,其原理很简单。

源代码如下:

/*Width:        数据行Height:       数据列pImage:       数据指针(取值范围0-255)m_client:     绘制矩形区域dc:           绘图句柄*/void imagesc(UINT Width, UINT Height, double *pImage,CRect &m_client,CClientDC &dc){CRect m_tab;CRgn  m_rgn;COLORREF  rgb;CBrush *pBrush=NULL;int i,j;double dx=(double)m_client.Width()/Width;double dy=(double)m_client.Height()/Height;//光栅化int color;for(i=0;i<Height;i++)for(j=0;j<Width;j++){m_tab.left =m_client.left +j*dx-1;m_tab.right =m_tab.left +dx+1;m_tab.top =m_client.top +i*dy-1;m_tab.bottom =m_tab.top +dy+1;m_rgn.CreateRectRgnIndirect(m_tab);//取数据color=(int)*(pImage+i*Height+j);rgb=RGB(color,color,color);pBrush=new CBrush(rgb);dc.FillRgn(&m_rgn,pBrush);//销毁资源delete pBrush;pBrush=NULL;m_rgn.DeleteObject();}}


函数使用范例:

CRect m_client;CClientDC dc(this);const int W=100;const int H=100;double *pImage=new double[W*H];int i,j;for(i=0;i<W;i++) //生成测试数据for(j=0;j<H;j++){*(pImage+i*W+j)=*(pImage+i*W+j)=255*sin(j*pi/15)*sin(j*pi/15); //pImage指向的数据取值范围为(0,255),如果实际数据不符,请转换}GetClientRect(m_client);imagesc(W,H,pImage,m_client,dc);delete pImage;pImage=NULL;


测试结果:

一种基于矩形块的色彩渲染方式实现二维数据可视化

使用随机数据,测试结果:

一种基于矩形块的色彩渲染方式实现二维数据可视化

改变imagesc中配色方案,可以用不同颜色取表示数据。更多扩展,可给予上述原理,自行设计。

读书人网 >编程

热点推荐