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, //指定目的矩形区域 ...
随机推荐
- 笔试面试题-小米Git
题目描述: git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常 ...
- IPoint从自定义的投影坐标系转换到自定义的地理坐标系
IPoint pointStart = new PointClass(); pointStart = xyPolyline.FromPoint; ISpatialReferenceFactory pS ...
- 最小化Spring XML配置
Spring提供两种技巧,可以帮助我们减少XML的配置数量. 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg&g ...
- Adobe Illustrator CS6 绿色简体中文版下载地址
一.Adobe Illustrator CS6 简体中文精简绿色优化版:1.由官方简体中文正式版制作而成,只需要执行一次快速安装即可使用.已经注册,非tryout版,支持x64位系统.2.精简了Ext ...
- linux 运维知识体系
这里将会介绍一下,LINUX运维工程师的知识体系. 只能说是个人理解吧.并不是必要或者充分的,仅供网友参考. 大部分本博客都有涉及,并不完整. 1.LINUX运维基础 1.1.LINUX系统的简介,分 ...
- 多线程的单元测试工具 - GroboUtils
写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...
- 修正 phpcmsv9 VIP过期日期为1970
打开 phpcms/modules/member/member.php 找到 $form_overdudate = form::date('info[overduedate]', date('Y-m- ...
- uva401 - Palindromes结题报告
题目地址 : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 《WPF程序设计指南》读书笔记——第3章 内容的概念
1.Content属性及字体相关的属性 using System; using System.Windows; using System.Windows.Media; namespace LY.Dis ...
- 1054. The Dominant Color (20)
时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Behind the scenes in the compute ...