关于地图(*.map文件)的绘制问题,请教各位大虾,百分赠送!
我遇到的问题是这样子的:
有一些描述地图信息的文件(*.map),其中头8个字节代表地图的长宽。后面每4个字节代表一个点的状态。从文件中读入数据之后,在绘制时遇到几个问题:
各个地图文件的大小不一(小的只有40×40,大的有2000×20000),但我希望绘制的时候区域是固定的(比如600×600象素),请问这应该如何实现。
还有,绘制一个地图点时用什么比较好?直接用SetPixel的话太小了,看不清楚。
问题点数:100、回复次数:3Top
1 楼wwch99(wanderer)回复于 2004-05-03 19:05:46 得分 100
大小不同,需要进行坐标变换。将地图坐标转到屏幕坐标。要设置地图坐标的左上点对应屏幕坐标的位置,需要的时候,设置成负值。绘制地图点,要好显示效果,可以做一个bmp,然后在位置点处显示。Top
2 楼kalltt(^-^!)回复于 2004-05-03 20:18:07 得分 0
不好意思,我不是很明白,能不能给个例子或者说明一下改调用那些函数,谢谢。Top
3 楼kalltt(^-^!)回复于 2004-05-04 12:15:18 得分 0
地图比例的问题解决了,但现在又碰到了刷新效率太慢的问题,我的绘制代码如下,请教各位能提高刷新效率的方法。
在Dialog的OnPaint函数内
其中m_pMapData为一个保存地图数据的对象,有三个内部成员:m_dwWidth,m_dwHeight和lpMapData(它是一个一维数组,保存地图数据)
dc.SetMapMode(MM_ISOTROPIC); // 设置模式
// 以下一段代码设置视图的纵横比例与地图的纵横比例一致
if(m_pMapData->m_dwWidth == m_pMapData->m_dwHeight)
{
m_VWidth = BASE_LENGTH;
m_VHeight = BASE_LENGTH;
}
else
{
if(m_pMapData->m_dwWidth > m_pMapData->m_dwHeight)
{
m_VWidth = BASE_LENGTH;
m_VHeight = ( m_VWidth * m_pMapData->m_dwHeight ) / m_pMapData->m_dwWidth ;
}
else
{
m_VHeight = BASE_LENGTH;
m_VWidth = ( m_VHeight * m_pMapData->m_dwWidth ) / m_pMapData->m_dwHeight ;
}
}
dc.SetWindowExt(CSize(m_pMapData->m_dwWidth,m_pMapData->m_dwHeight)); // 设置地图的大小
dc.SetViewportExt(CSize(m_VWidth,m_VHeight)); // 设置视图大小
// 绘制地图
for(DWORD X = 0 ; X < m_pMapData->m_dwWidth ; X++)
for(DWORD Y = 0 ; Y < m_pMapData->m_dwHeight ; Y++)
dc.FillSolidRect(X,Y,1,1,m_pMapData->lpMapData[m_pMapData->m_dwWidth * X + Y]);
现在的问题是当地图大时,刷新极慢,求加快刷新速率的方法。Top




