有兴趣讨论讨论:VC中如何将图象快速显示在屏幕的任意区域

wine 2001-08-14 10:21:05
谁有好办法,只用MFC和API里的函数快速将内存里的内容显示到屏幕的任意矩形区域,
...全文
139 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wine 2001-08-16
  • 打赏
  • 举报
回复
不好意思问题找到了:
pbMem[i*3] = clrr;
pbMem[i*3+1] = clrg;
pbMem[i*3+2] = clrb;
偶还是希望对SetDIBitsToDevice()更深点了解,哪位大虾有这方面的资料请
MIAL:zh_x_l@263.net
或告知 ths :)
这作为小游戏的屏幕刷新挺好的
wine 2001-08-15
  • 打赏
  • 举报
回复
那bmiColors[]在24、32位时填何内容,SetDIBitsToDevice()速度确实快,里面的参数太费解,填得不对,
没看出效果,哪为大侠有相关源码MIAL:zh_x_l@263.net或贴出来让偶研究研究,先谢了
c_z_y 2001-08-15
  • 打赏
  • 举报
回复
bmiColors[]在256色时是调色版,在16位色的时候,是颜色掩膜。24,32色没有意义。

c_z_y 2001-08-15
  • 打赏
  • 举报
回复
bmiColors[]是调色版,在16位色的时候,是颜色掩膜。
gamedragon 2001-08-15
  • 打赏
  • 举报
回复
24、32位色不需要调色板,图像数据里就直接包含了颜色的RGB分量
wine 2001-08-15
  • 打赏
  • 举报
回复
我试了在一对话框中画东西,但画出的矩形是黑的或灰的且矩形上3分之2部分一直是黑的,
下3分之1一直是按灰度方式闪烁,而没出现设想的彩色块,现附上关键源码,哪位大侠帮忙看看
//初始值
BITMAPINFOHEADER bmhead =
{sizeof(BITMAPINFOHEADER),
400, //宽
300, //高
1,
24, //24位真彩
BI_RGB, //非压缩
0,0,0,0,3000
};//不知此结构值是否有问题,未给bmiColors赋值
rgbBMINFO.bmiHeader = bmhead;

void* pviMem = ::GlobalAlloc(GMEM_FIXED,400*300*3);//分配全局内存

SetTimer(1, 50, NULL);

iWidth=400;
iHight=300;
//主要刷新工作
void CVideoDlg::OnTimer(UINT nIDEvent)
{

HDC hdc = this->GetDC()->GetSafeHdc() ;
long i,j;
BYTE clrr,clrg,clrb;
byte* pbMem = (byte*)pviMem;

if(!bStop)
{if(hdc)
{
clrr = rand();
clrg = rand();
clrb = rand();
for(i = 0; i <= 400*300; i++)//iWidth*iHight
{

pbMem[i] = clrr;
pbMem[i+1] = clrg;
pbMem[i+2] = clrb;
}
SetDIBitsToDevice(hdc,5,0,iWidth,iHight,0,
iHight,iHight,iHight,pviMem,&rgbBMINFO,DIB_RGB_COLORS);
}

CDialog::OnTimer(nIDEvent);
}
gamedragon 2001-08-14
  • 打赏
  • 举报
回复
用SetDIBitsToDevice()函数,只需要建一个BITMAPINFO结构
wine 2001-08-14
  • 打赏
  • 举报
回复
内存里的东西有近1M,只有数据没结构信息,我不想用CBITMAP类再耗一块存储区,各位谁编过类似程序的请指教
wine 2001-08-14
  • 打赏
  • 举报
回复
谁知道BITMAPINFO结构中RGBQUAD bmiColors[]是起什么作用的,我理解为使用到的颜色数组,如果24位的图片启不要分配2^24,本人理解有误请指教,
c_z_y 2001-08-14
  • 打赏
  • 举报
回复
SetDIBitsToDevice()速度极快,据我猜测,可能是用DMA方式传输内存到显存。不需要另外的
数据存储区。
wine 2001-08-14
  • 打赏
  • 举报
回复
gamedragon(gamedragon) 用SetDIBitsToDevice()需要额外的存储开销吗?如果还要另外的数据存储区的话,就得将1M的东西再拷贝一下,速度肯定快不了。

8,325

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧