Visual C++位图操作
一.BitBlt
将一幅位图从一个设备场景复制到另一个,即复制像素,前面参数为目标,后者为源
case WM_PAINT:hdcClient = BeginPaint (hwnd, &ps) ;hdcWindow = GetWindowDC (hwnd) ;for (y = 0 ; y < cyClient ; y += cySource)for (x = 0 ; x < cxClient ; x += cxSource){BitBlt (hdcClient, x, y, cxSource, cySource,hdcWindow, 0, 0, SRCCOPY) ;}ReleaseDC (hwnd, hdcWindow) ;EndPaint (hwnd, &ps) ;return 0 ;
二.拉伸位图(会使图片不清晰)
使用StretchBlt函数,比BitBlt多了两个参数
case WM_PAINT:hdcClient = BeginPaint (hwnd, &ps) ;hdcWindow = GetWindowDC (hwnd) ;StretchBlt (hdcClient, 0, 0, cxClient, cyClient,hdcWindow, 0, 0, cxSource, cySource, MERGECOPY) ;ReleaseDC (hwnd, hdcWindow) ;EndPaint (hwnd, &ps) ;return 0 ;
三.创建位图
3.1
hBitmap = CreateCompatibleBitmap (hdc, cx, cy) ; //此函数建立了一个与设备兼容的位图
hBitmap CreateBitmapIndirect (&bitmap) ; //通过结构体创建
- 先LoadBitmap 载入位图
- 然后创建CreateCompatibleDC
- BitBlt 拷贝像素
switch(message) { case WM_CREATE:hInstance = ((LPCREATESTRUCT) lParam)->hInstance ;hBitmap = LoadBitmap (hInstance, TEXT ("Bricks")) ;GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;cxSource = bitmap.bmWidth ;cySource = bitmap.bmHeight ;return 0 ; case WM_SIZE:cxClient = LOWORD (lParam) ;cyClient = HIWORD (lParam) ;return 0 ; case WM_PAINT:hdc = BeginPaint (hwnd, &ps) ;hdcMem = CreateCompatibleDC (hdc) ;SelectObject (hdcMem, hBitmap) ;for (y = 0 ; y < cyClient ; y += cySource)for (x = 0 ; x < cxClient ; x += cxSource){BitBlt (hdc, x, y, cxSource, cySource, hdcMem, 0, 0, SRCCOPY) ;}DeleteDC (hdcMem) ;EndPaint (hwnd, &ps) ;return 0 ; case WM_DESTROY:DeleteObject (hBitmap) ;PostQuitMessage (0) ;return 0 ; }
3.2用位图创建文字,用0和1表示,相当于画像素点的意思.
填充BITMAP的bmBits字段
static BITMAP bitmap = { 0, 8, 8, 2, 1, 1 } ;static BYTE bits [8][2]={ 0xFF, 0, 0x0C, 0, 0x0C, 0, 0x0C, 0,0xFF, 0, 0xC0, 0, 0xC0, 0, 0xC0, 0 } ;static HBITMAP hBitmap ;static int cxClient, cyClient, cxSource, cySource ;HDC hdc, hdcMem ;int x, y ;PAINTSTRUCT ps ;switch (message){case WM_CREATE:bitmap.bmBits = bits ;hBitmap = CreateBitmapIndirect (&bitmap) ;cxSource = bitmap.bmWidth ;cySource = bitmap.bmHeight ;return 0 ;
3.3使用位图创建笔刷
hBitmap = LoadBitmap (hInstance, TEXT ("Bricks")); hBrush = CreatePatternBrush (hBitmap); DeleteObject (hBitmap);
3.4在位图中绘图
用CreateCompatibleBitmap 创建一幅与设备兼容有关位图,然后选择位图,SelectObject (hdcMem, hBitmap)
hdc = GetDC (hwnd) ; hdcMem = CreateCompatibleDC (hdc) ; GetTextExtentPoint32 (hdc, szText, lstrlen (szText), &size); cxBitmap = size.cx ; cyBitmap = size.cy; hBitmap = CreateCompatibleBitmap (hdc, cxBitmap, cyBitmap); ReleaseDC (hwnd, hdc) ; SelectObject (hdcMem, hBitmap) ; TextOut (hdcMem, 0, 0, szText, lstrlen (szText));
创建好以后就可以同上方法用BitBlt或者StretchBlt方法操作像素了
四.菜单插入位图
hBitmap = StretchBitmap (LoadBitmap (hInstance, TEXT ("BitmapFont"))) ; AppendMenu (hMenu, MF_BITMAP | MF_POPUP, (int) hMenuPopup,(PTSTR) (LONG) hBitmap) ;
Visual C++位图操作相关推荐
- Visual C++位图操作(1)
一.BitBlt 将一幅位图从一个设备场景复制到另一个,即复制像素,前面参数为目标,后者为源 case WM_PAINT:hdcClient = BeginPaint (hwnd, &ps) ...
- HarmonyOS之深入解析图像的位图操作和属性解码
一.位图操作 ① 应用场景 位图操作就是指对 PixelMap 图像进行相关的操作,比如创建.查询信息.读写像素数据等. ② 位图操作 API 位图操作类 PixelMap 的主要接口: 接口名 描述 ...
- 【iOS-Cocos2d游戏开发之二十】精灵的基础知识点总汇(位图操作/贴图更换/重排z轴等)以及利用CCSprite与CCLayerColor制作简单遮盖层!...
为什么80%的码农都做不了架构师?>>> 李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigam ...
- matlab 图像上下翻,Matlab图像九宫格基本操作(翻转,镜像等)+位图操作
Matlab图像九宫格基本操作(翻转,镜像等)+位图操作 Matlab图像九宫格基本操作(翻转,镜像等)+位图操作 这次blog提到的操作对于matlab来说都很基础,而且对于有编程和计算机基础的人来 ...
- 模拟redis位图操作bitmap 统计日活跃用户数
模拟redis位图操作bitmap 统计日活跃用户数 假设一年有100天以上登录过,则为活跃用户 import redis#连接redis r =redis.Redis(host='redis数据库服 ...
- MFC之学习位图操作
1.笔记 1.1位图的概念 位图是一种将显示器的图像数据不经过压缩而直接按位存储的文件格式,位图主要分为设备相关位图(device dependent bitmap,DDB),设备无关位图(devic ...
- [Step By Step]SAP Visual Intelligence数据操作、地图信息显示(SAP HANA中提取数据)
Instruction: 本案例从SAP HANA中提取数据,试图创建数据的地图显示.数据修正 View: http://www.cnblogs.com/omygod/archive/2013/04/ ...
- 【Demo3d】Visual类对象操作常用方法
方法 (Visual:对象) 作用 参数备注 移动位置 MoveTo() Visual.MoveTo ( Vector3 , Double , Double ) 移动对象的位置 Vector3:全局坐 ...
- 电脑常用快捷键大全(含Visual Studio快捷键操作)
目录 一.系统快捷键 二.常用系统命令 三.QQ快捷键 四.IE浏览器快捷键使用大全 五.Word 中的快捷键 六.Excel 中的快捷键 七.PowerPoint 中的快捷键 八.Visual St ...
最新文章
- matlab的基础使用
- 从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection
- centos apache 腾讯云ssl证书配置
- 运行gclient一直没反应_安川变频器通电没反应维修措施分享
- CSS Margin 边距详解、CSS 实现水平垂直居中、overflow 兼容 Safari 浏览器
- 通过AndroidStudio找到数据库文件
- intel cpu core/“酷睿”系列发展史,供组装机的朋友们参考
- java md5类_java的md5加密类
- 从应用迁移到平台微认证:鲲鹏技术解读
- 联想笔记本怎么进入pe系统_联想进入u盘pe系统安装 u盘pe安装win7系统
- Android 登陆页面 图片验证码
- GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...
- 《程序员升职记》 第二年 繁忙的收发室
- [Visual Assist]快速创建实现
- linux+查内存数量,检查 Linux 中内存使用情况的 8 条命令 | Linux 中国
- 技术内部创新的类型和要素
- 【CAD】通过VBA获取CAD中的文本
- Springboot+Netty搭建UDP客户端
- 【Codeforces 723D】Lakes in Berland (dfs)
- Java中Map使用详解
热门文章
- 中原工学院c语言期末考试题,中原工学院软件学院 2010年C语言 试卷A
- iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
- JAVA中的this怎么理解_Java中的this关键字怎么理解?
- stm32 复位到内部bootloader
- bat窗口大小设置_Tomcat的JVM和连接数设置
- java url 双引号_java - Java在POST请求中发送带有转义双引号的JSON字符串[duplicate] - 堆栈内存溢出...
- cedit多行文本设置透明背景会重叠_PPT脱白教程11期【形状篇2】聊聊形状和文本框的那些事儿~...
- 用积木做了个无人机。
- java netty socket_Java-彻底弄懂netty-原来netty是这样启动的-知识铺
- FPGA病房呼叫系统实现