我是以在资源文件中创建了一个100*100的资源位图
然后选择进内存场景中 再BitBit在窗体上显示出来.现在 我要在内存中创建一个8000*8000的位图 这样以资源文件方式创建是不可能的
所以 能不能直接用函数在内存中创建?然后bitbit在窗中上?我创建的是HDC.
然后选择进内存场景中 再BitBit在窗体上显示出来.现在 我要在内存中创建一个8000*8000的位图 这样以资源文件方式创建是不可能的
所以 能不能直接用函数在内存中创建?然后bitbit在窗中上?我创建的是HDC.
如果那样,就要根据输出设备的分辨率进行采样处理,比如你的显示器为1024*768,那么一个简单的采样率的计算就是 横向为: 8000 / 1024 = 7.8125(每隔8个象素取一个值), 纵向为:8000 / 768 = 10.41666...(每隔11个象素取一个值) ,最后出来的小数,看你用什么样的策略来处理啦,当然你可能先要在内存里开辟一个1024*768的区域来缓存一下,然后显示出来就可以了.
如果你是一屏显示一部分,也就是不进行压缩采样的话,那么就要找到图片在内存的起始位置先,然后在在那个函数里指定要显示的区域的大小 width * height 然后把起始地址的指针传递给显示函数就可以啦,然后要显示别的部分,就是乘以宽和高的偏移量,比如8*width,就是右移了八个屏幕宽,如果你的width和屏幕一样宽的话,总之只是一些对数据的偏移和寻址操作,只要你能找到你想要显示的区块的左上角的地址,然后你就可以指定大小以及屏幕上的位置来显示它了,当然还要注意内存是否是连续的.
以上只是一个思路啦,你具体用什么实现随你啦
SelectObject(MemDC,BG);//选择BG对象到MemDC环境中
BitBlt(dc.m_hDC,0,0,32,32,MemDC,0,0,SRCCOPY);//在窗体上绘制MemDC环境中的图形显示出来是黑色的
但我再用语句
BitBlt(MemDC,0,0,32,32,TexDC,0,0,SRCCOPY);
BitBlt(dc.m_hDC,0,0,32,32,MemDC,0,0,SRCCOPY);//在窗体上绘制MemDC环境中的图形
将另一个场景中的图形复制到MemDC中的时候就显示不出来 这是怎么回事?
/*
将图形绘制到内存图形缓冲区中,然后copy到屏幕上
#内存缓冲区的大小固定,且不超过图片实际大小。
#当图片小于内存缓冲区最大面积时,内存缓冲区设置和图片大小相同
#当缩放窗体时,需要刷新屏幕,即拷贝内存缓冲区到屏幕
#当移动窗体视口时,如果超出内存缓冲区,则更新缓冲区内容当图片大小大于最大缓冲区的时候,需要采取缓冲图片数据的技术如下图
当移动可视屏幕界面超出缓冲图片内容的时候,需要在界面所处图片位置
重绘n(一般为2)倍宽和高的缓冲区 (0,0)
.__________________________________
| | | |
| | | 实 |
| 屏 幕 | 缓 | |
| | 冲 | 际 |
|____________| 图 | |
| 片 | 图 |
|_______________________| |
| 片 |
| |
|__________________________________| 图一
(0,0)
.__________________________________
| (m_nBufPicX,m_nBufPicY) |
| ._______________________ |
| | (m_nXDelta,m_nYDelta)| |
| | .____________ | |
| | | | | |
| | | 屏 幕 | | |
| | | | | |
| | |____________| | |
| | 缓 冲 图 片 | |
| |_______________________| |
| |
| 实 际 图 片 |
|__________________________________|
图二*/