GUI 剖析之图片显示
来源:互联网 发布:淘宝抢拍器哪个最好 编辑:程序博客网 时间:2024/05/16 17:33
二:我想实现图片显示
当你玩游戏的时候,有没有对里面多彩的画面感到好奇,在实现图片显示之前我想有必要说明游戏画面工作机制(个人理解,可能与真实情况有些出入,当然三维立体游戏除外,参考用)
以愤怒的小鸟游戏为例,我想你一定玩过:
当你进入游戏,里面有个游戏场景,一个弹弓,几只小鸟,一堆木块..
其实游戏场景是图片,弹弓是图片,小鸟是图片,木块还是图片,不相信的话可以再你电脑里愤怒的小鸟游戏客户端里查看有没有这些图片。当然游戏中各种动作是通过API、数学逻辑(小鸟飞行)、力学原理(木块有组织的坍塌)、美术设计等相结合才能设计出来的。好了,言归正传:
GDI显示图片:
HBITMAP gBitmap=NULL;
if(gBitmap==NULL)
{
gBitmap= LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1));
}
if (gBitmap1)
{
HDC lTempDc = CreateCompatibleDC(hdc);
SelectObject(lTempDc,gBitmap);
BITMAPbm;
GetObject(gBitmap,sizeof(BITMAP), (LPSTR)&bm);
SetStretchBltMode(hdc,HALFTONE);
StretchBlt (hdc, 0, 0,cxClient,cyClient,lTempDc, 0, 0,bm.bmWidth, bm.bmHeight, SRCCOPY) ;
}
GDI+显示图片:
HDC hMemDC=CreateCompatibleDC(hdc);
HBITMAP hMemBM=CreateCompatibleBitmap(hdc,cxClient,cyClient);
//创建兼容DC和兼容位图,为什么要这样做呢?当你用上面的GDI方法没有创建兼容DC,你会发现图片总是在不停地闪烁,真的很讨厌,我上网查了一下,了解了一下,其实你的PC显示屏不是静态的,而是以一定的频率在不停地刷新(人眼无法感知),所以图片闪烁也就是这个原因,程序员调用API显示图片其实在内部计算机是图片像素一位一位的复制到显示屏上(显示屏也是个存储区),如果创建兼容DC(和用BeginPaint返回的DC一样),像素就首先一位一位的复制到兼容DC上,这就相当于一个缓冲区,然后将像素一次性全部复制到显示屏上,这就解决了闪烁问题。
SelectObject(hMemDC,hMemBM);
Graphics g(hMemDC);
static Image *gImag=NULL;
if (gImag==NULL)
{
gImag=Image::FromFile(_T("setup0.jpg"));//这里的_T("setup0.jpg")可以替换成TEXT("setup0.jpg")或者L” setup0.jpg”,不过为了代码的可读性建议统一用一种方法。
}
g.DrawImage(gImag,0,0,100,100);
BitBlt(hdc,0,0,100,100,hMemDC,0,0,SRCCOPY);
DeleteObject(hMemBM);
ReleaseDC(hwnd, hMemDC);
- GUI 剖析之图片显示
- GUI 剖析之控件篇之 图片控件
- GUI 剖析之 进入windows GUI编程
- GUI 剖析之 回顾操作系统
- GUI 剖析之 关机命令
- GUI 剖析之 shell 命令
- Matlab GUI,菜单,显示图片
- GUI剖析之 获取屏保控制窗口显示模式的实现(屏保应用)
- GUI 剖析之实现窗口显示在Z轴最上方
- GUI剖析之资源篇之 菜单
- GUI 剖析之资源篇之 工具栏
- GUI 剖析之资源篇之 状态栏
- GUI 剖析之资源篇之 对话框
- GUI 剖析之控件篇之 进度条
- GUI 剖析 之第一个windows程序
- GUI 剖析之播放器实例1
- GUI 剖析之 系统托盘图标的实现
- GUI显示系统之SurfaceFlinger
- mysq 数据库导入过大数据时要修改phpini 的三个地方
- 实用SQL语句大全
- 转 Ant builder.xml 详解
- js操作Excel
- 程序员应当如何保持优秀
- GUI 剖析之图片显示
- 关于CI分页的心得
- POJ 2190(模拟策略)
- oracle数据类型
- C复习
- 以System启动进程
- 百度地图上画出轨迹 for android
- iOS的基本设计模式
- xPath对xml文档的处理入门4