LoadImage 和 BitBlt
#include <windows.h>
#define WINDOWCLASS TEXT("Test")
#define WNDTITLE TEXT("Test")
#define WINDOW_WIDTH 480
#define WINDOW_HIGHT 420
LRESULT CALLBACK WndProc(HWND hWnd,UINT meg,WPARAM wParam,LPARAM lParam);
void Clear();
HDC hMemoryDC;
HDC hDC;
HBITMAP hBitMap;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
HWND hWnd;
WNDCLASSEX wndClassEx =
{
sizeof(WNDCLASSEX),
CS_HREDRAW | CS_VREDRAW,
WndProc,
,,
hInstance,
LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),
(HBRUSH)GetStockObject(WHITE_BRUSH),
NULL,
WINDOWCLASS,
LoadIcon(NULL,IDI_WINLOGO)
};
RegisterClassEx(&wndClassEx);
hWnd = CreateWindowEx(
,
WINDOWCLASS,
WNDTITLE,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
WINDOW_WIDTH,
WINDOW_HIGHT,
NULL,
NULL,
hInstance,
NULL
);
if (NULL == hWnd)
{
return ;
}
// 4 个步骤:
// 1,创建设备上下文。
// 2,创建GDI对象。
// 3,将GDI对象赋给设备上下文。
// 4,BitBlt位块传输给其他设备,以用显示。
hDC = GetDC(hWnd); // 先将图片放入内存,在从内存放入屏幕,GetDC(hWnd) 得到窗口上下文的句柄
hMemoryDC = CreateCompatibleDC(hDC); // 为了读进内存,先建立与屏幕相兼容内存上下文
// 得到HBITMAP 对象 是一个HGDIOBJ
hBitMap = (HBITMAP)LoadImage(NULL,TEXT("C:\\Users\\boiceliu\\Pictures\\girl.bmp"),IMAGE_BITMAP, WINDOW_WIDTH,WINDOW_HIGHT ,LR_LOADFROMFILE);
//hBitMap = (HBITMAP)LoadImage(NULL,TEXT("C:\\Users\\boiceliu\\Pictures\\girl.bmp"),IMAGE_BITMAP,480,400,LR_LOADFROMFILE);
// 经测试LoadImage 的参数int cx,int cy 代表要将图片写入分辨率为cx * cy的内存区,如果和图片原始分辨率不同的话,你懂的。
if (NULL == hBitMap)
{
MessageBox(NULL,TEXT("NULL == hBitMap"),TEXT("ERROR"),MB_OK);
return ;
}
SelectObject(hMemoryDC,hBitMap); // 将HBITMAP 作为内存上下文的GDI对象。
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
MSG msg;
while (true)
{
if (PeekMessage(&msg,NULL,,,PM_REMOVE))
{
if (WM_QUIT == msg.message)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
void Clear()
{
//ReleaseDC(hWnd,hDC);
//ReleaseDC(hWnd,hMemoryDC);
DeleteDC(hDC);
DeleteDC(hMemoryDC);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,WPARAM wParam,LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
switch (msg)
{
case WM_SIZE:
case WM_PAINT:
{
hDC = BeginPaint(hWnd,&ps);
// SRCCOPY 表示直接用源像素替换目的像素,这里还可以是一些其他的操作
// 大多位运算,以确定像素是怎样写入的。这些操作可以实现一些特效。
BitBlt(hDC,,,WINDOW_WIDTH,WINDOW_HIGHT,hMemoryDC,,,SRCCOPY);
EndPaint(hWnd,&ps);
}
break;
case WM_KEYDOWN:
{
if (VK_ESCAPE == wParam )
{
DestroyWindow(hWnd);
}
}
break;
case WM_CLOSE:
{
Clear();
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
{
PostQuitMessage();
}
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
return ;
}
LoadImage 和 BitBlt的更多相关文章
- StretchBlt函数和BitBlt函数的用法
StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...
- CDC之CreateCompatibleDC与BitBlt
CreateCompatibleDC 创建一个与指定设备一致的内存设备描写叙述表. HDC CreateCompatibleDC(HDC hdc //设备描写叙述表句柄); 參数 hdc 现有的设备描 ...
- Bimmap 成像用bitblt 缩放问题
BitBlt不能变尺寸,但是StrectchBlt可以变尺寸,在使用StrectchBlt时要注意,首先要设置一下SetStretchBltMode,通常设成HALFTONE,这样缩放时就不会失真. ...
- 在c#中使用bitblt显示图片
使用bitblt比DrawImage有更好的性能 using AForge.Video.DirectShow; using System; using System.Collections.Gener ...
- CreateCompatibleDC与BitBlt 学习
CreateCompatibleDC与BitBlt CreateCompatibleDC 创建一个与指定设备一致的内存设备描述表. HDC CreateCompatibleDC(HDC hdc //设 ...
- MFC函数之BitBlt
MFC函数之BitBlt // Cgame123View 绘制 void Cgame123View::OnDraw(CDC* pDC) { Cgame123Doc* pDoc = GetDocumen ...
- LoadImage函数问题
loadimage函数加载图片类型 Value Meaning IMAGE_BITMAP Loads a bitmap. IMAGE_CURSOR Loads a cursor. IMAGE_ICON ...
- Delphi中BitBlt函数实现屏幕对象抓图
uses WinTypes, WinProcs, Forms, Controls, Classes, Graphics; function CaptureScreenRect( ARect: TRec ...
- TransparentBlt、StretchBlt与BitBlt三个函数的区别
jackyhwei 发布于 2011-10-13 10:55 点击:1080次 来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...
随机推荐
- CSS样式三
CSS表格样式 border-collapse:表格边线合并 caption-side: 属性值: top:设置表格的标题在表格的上方(默认效果) bottom:设置表格的标题在表格的下方 样式代码: ...
- 常用到的Tomcat的修改方法
1.修改端口号 打开tomcat的service.xml文件: 找到<Connector connectionTimeout="20000" port="8080& ...
- 哈希表的C++实现(转)
哈希表的几个概念: 映像:由哈希函数得到的哈希表是一个映像. 冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突. 处理冲突的几个方法: 1.开放地址法:用开放地址处理冲突就是当冲突发生时,形成一 ...
- 取消定时-CICS
CICE CA R 做定时的时候最好加上REqID
- 【转】DataGridView显示行号
ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...
- 一款js点击显示和隐藏的例子(pc,移动端通用)
html部分: <div id="box"> <div id="box_title">标题</div> <div id ...
- wamp Server2.5 配置 自定义目录
煎熬了两天终于找到了方法!!! 前提先改成中文 右键"W"图表-> Language -> chinese; 成功改为中文. 自定义目录步骤: 一.添加一个Alias ...
- Python Generators vs Iterators
http://stackoverflow.com/questions/2776829/difference-between-python-generators-vs-iterators iterato ...
- pdf转chm的实现方法
相比pdf, CHM电子书在Windows系统下不需要安装额外的浏览器即可进行阅读,其内容是基于浏览器的风格,更容易被用户所接受.而且, 具有更强大的功能配置,比如可提供强大的全文搜索.索引.书签等的 ...
- jdbc之分页查询
分页查询作为一项十分重要的数据库查询技术,在很多web项目中都会要用到,当然移动开发中也是会涉及的. 一.分页查询的sql语句: ps:为了方便阐述,下面统一使用student表作为查询的表:colN ...