#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的更多相关文章

  1. StretchBlt函数和BitBlt函数的用法

    StretchBlt和BitBlt都用在双缓冲视图中,用来显示一幅图像 一.StretchBlt 函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩.也即是将内存中的 ...

  2. CDC之CreateCompatibleDC与BitBlt

    CreateCompatibleDC 创建一个与指定设备一致的内存设备描写叙述表. HDC CreateCompatibleDC(HDC hdc //设备描写叙述表句柄); 參数 hdc 现有的设备描 ...

  3. Bimmap 成像用bitblt 缩放问题

    BitBlt不能变尺寸,但是StrectchBlt可以变尺寸,在使用StrectchBlt时要注意,首先要设置一下SetStretchBltMode,通常设成HALFTONE,这样缩放时就不会失真. ...

  4. 在c#中使用bitblt显示图片

    使用bitblt比DrawImage有更好的性能 using AForge.Video.DirectShow; using System; using System.Collections.Gener ...

  5. CreateCompatibleDC与BitBlt 学习

    CreateCompatibleDC与BitBlt CreateCompatibleDC 创建一个与指定设备一致的内存设备描述表. HDC CreateCompatibleDC(HDC hdc //设 ...

  6. MFC函数之BitBlt

    MFC函数之BitBlt // Cgame123View 绘制 void Cgame123View::OnDraw(CDC* pDC) { Cgame123Doc* pDoc = GetDocumen ...

  7. LoadImage函数问题

    loadimage函数加载图片类型 Value Meaning IMAGE_BITMAP Loads a bitmap. IMAGE_CURSOR Loads a cursor. IMAGE_ICON ...

  8. Delphi中BitBlt函数实现屏幕对象抓图

    uses WinTypes, WinProcs, Forms, Controls, Classes, Graphics; function CaptureScreenRect( ARect: TRec ...

  9. TransparentBlt、StretchBlt与BitBlt三个函数的区别

    jackyhwei 发布于 2011-10-13 10:55 点击:1080次  来自:blog.csdn.net/weiqubo BOOL StretchBlt( int x, //指定目的矩形区域 ...

随机推荐

  1. jQuery实现图片轮播

    之前有碰到过jQuery实现列表自动滚动,这次的图片轮播在原理上与之相同,只有一些细微的差别,就是需要在图片的右下角显示当前图片的序号,效果如下: 先看一看html代码,以及对应的css代码: < ...

  2. Linq to sql 接收存储过程返回的多个结果集

    故事前提.......... 一.返回顺序结果集 存储过程实例 CREATE PROCEDURE MultipleResultTypesSequentially AS select * from pr ...

  3. 【Linux】rsync同步文件 & 程序自启动

    rsync使用 1. 为什么使用rsync? rsync解决linux系统下文件同步时, 增量同步问题. 使用场景: 线上需要定时备份数据文件(视频资源), 使用rsync完成每天的增量备份. 参见: ...

  4. linux ubuntu ppa源

    ubuntu10.04添加删除PPA源 增加ppa资源以后,今后的版本更新什么的都会从launchpad去下载,在国内访问launchpad速度比乌龟还慢   Ubuntu里,PPA代表一种非稳定版本 ...

  5. String.Format数字格式化输出 {0:N2} {0:D2} {0:C2

    //格式为sring输出 //   Label1.Text = string.Format("asdfadsf{0}adsfasdf",a); //   Label2.Text = ...

  6. STM32F10XXX 启动设置

    在STMF103XXX 里,可以通过Boot[1:0]引脚选择3种不同的启动模式:       启动模式选择引脚      启动模式                 说明   BOOT1   BOOT ...

  7. webpack减少打包后文件体积的几种方法

    webpack 把我们所有的文件都打包成一个 JS 文件,这样即使你是小项目,打包后的文件也会非常大.下面就来讲下如何从多个方面进行优化. 去除不必要的插件 刚开始用 webpack 的时候,开发环境 ...

  8. discuz X2.5自己写代码,获取当前登录的用户信息

    <? //这个只是获取当前用户账号以及积分的方法,同样你修改SQL语句可以实现discuz所有数据处理的功能 require '../source/class/class_core.php';/ ...

  9. Python print语句

    1. 输出字符串 >>> strHello = 'Hello World' >>> print (strHello) Hello World 2. 格式化输出整数 ...

  10. 纯CSS实现多选组件

    mark: http://blog.meathill.com/tech/fe/create-multiple-select-component-with-pure-css.html Demo: 小宝3 ...