VC++在内存中绘图

在内存位图中绘图,并显示。代码如下:

HDC hdc=GetDC(hwnd);  
RECT rect;    
GetClientRect(hwnd,&rect);    
int cxClient = rect.right;  
int cyClient = rect.bottom;  
  
//为显示设备创建一块相应的内存  
HDC hdcmem = CreateCompatibleDC(NULL);  
  
//创建位图  
HBITMAP hBitmap = CreateCompatibleBitmap(hdc,cxClient,cyClient);  
  
//将内存句柄和位图句柄绑定  
SelectObject(hdcmem,hBitmap);  
  
//画图  
FillRect(hdcmem,&rect,NULL);  
Rectangle(hdcmem,20,20,100,100);    
//显示到窗口上  
BitBlt(hdc,0,0,cxClient,cyClient,hdcmem,0,0,SRCCOPY);  
  
DeleteObject(hdcmem);  
DeleteObject(hBitmap);  
ReleaseDC(hwnd,hdc);

要创建多个内存位图,可以多次调用CreateCompatibleDC和CreateCompatibleBitmap函数。

时间: 2024-11-18 14:07:42

VC++在内存中绘图的相关文章

iOS之在内存中绘图

与直接在UIView控件上绘图不同,在内存中绘图时,需要开发者自己准备绘图环境,Quartz 2D提供了一个非常便捷的函数:UIGraphicsBeginImageContext(CGSize size),该函数用于准备绘图环境.当图形绘制完成后,可调用UIGraphicsEndImageContext()函数结束绘图和关闭绘图环境. 总结来说,在内存中绘图的步骤如下. 调用UIGraphicsBeginImageContext(CGSize size)函数准备绘图环境. 调用UIGraphic

VC++大数据量绘图时无闪烁刷屏技术实现(我的理解是,在内存上作画,然后手动显示,而不再直接需要经过WM_PAINT来处理了)

http://hantayi.blog.51cto.com/1100843/383578 引言 当我们需要在用户区显示一些图形时,先把图形在客户区画上,虽然已经画好但此时我们还无法看到,还要通过 程序主动地刷新用户区,强制Windows发送一条WM_PAINT消息,这将引发视类OnDraw函数简单地将所有的图形对象重画,这样才完成了图形的 显示工作,但在刷新的同时会引起较明显的闪烁尤其是当画面面积较大.图像元素过多时尤为明显甚至达到无法正常工作的地步.因此,我们需要做相应的处理.本 文介绍了采用

VC++使用CImage在内存中Bmp转换Jpeg图片

之前写了一篇<VC++使用CImage在内存中Jpeg转换Bmp图片>,通过CImage实现了在内存中Jpeg转Bmp. 既然Jpeg能转Bmp,那CImage也支持Bmp转Jpeg,与上一篇文章依赖CImage的Load函数相反,Bmp转Jpeg通过Save函数实现: 使用的也是IStream接口的函数重载,具体可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/d06f3fhw.aspx 下面贴出使用CImage在内存中Bmp转换Jpeg的代码

VC++使用CImage在内存中Jpeg转换Bmp图片

VC++中Jpeg与Bmp图片格式互转应该是会经常遇到,Jpeg相比Bmp在图片大小上有很大优势. 本文重点介绍使用现有的CImage类在内存中进行转换,不需要保存为文件,也不需要引入第三方库. Libjpeg库在8以后也支持了内存读取和转换,不过使用起来较为麻烦,还需要手动编译,用CImage类完全可以实现,代码更简洁. 实现方法: VC++对Jpeg.Png图片的操作主要使用CImage,相信很多人用过CImage的Load和Save函数从文件读取或保存Jpeg或Png格式的文件,这两个重载

[C#绘图]Bitmap锁定到系统内存中

具体方法Bitmap.LockBits方法的实现功能是讲Bitmap锁定到系统内存中. 使用LockBits方法,可以在系统内存中锁定现有的位图,以便通过编程方式进行修改.尽管用LockBits方式进行大规模更改可以获得更好的性能,但是仍然可以用SetPixel方法来更改图像的颜色. 函数的返回值的类型是BitmapData,包含选定Bitmap区域的特性. private void LockUnlockBitsExample(PaintEventArgs e) { // Create a ne

VC/MFC开发中的句柄HWND

Windows开发中,经常会碰到一个常见的字眼HWND,如下 HWND hWnd; hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); HWND就是句柄,那么句柄是什么? [句柄定义] 先看Windows下面的定义,如下 DECLARE_HANDLE (HWND)

移码及浮点数在内存中的存储方式

首先说一下十进制的小数怎么转化为二进制的小数,计算机根本就不认识10进制的数据,他只认识0和1,所以,10进制的小数在计算机中是用二进制的小数表示的. 十进制的小数转化为二进制的小数的方法: 可以简单的概括为正序取整,将十进制的小数部分乘以2,然后取整数部分. 例如将0.2转化为二进制的小数,那么0.2*2=0.4,其整数部分是0,所以二进制小数的第一位为0,然后0.4*2=0.8,其整数部分是0,所以二进制小数的第二位为0,然后0.8*2=1.6,其整数部分是1,所以二进制小数的第三位是1,然

字符在内存中最终的表示形式是什么?是某种字符编码还是码位(Code Point)?

字符在内存中最终的表示形式是什么?是某种字符编码还是码位(Code Point)? 根据我的了解,编码中有三个核心概念:1. 字符集(Character Set),可以说是一个抽象概念,字符的合集2. 码位(Code Point),将抽象的字符集中每一个字符映射到一个整数3. 字符编码(Encoding),按照某种编码规则用二进制来表示一个字符 我对码位这个概念理解的不是很清楚,Code point中说: The notion of a code point is used for abstra

内存中常见异常值的解释(比如0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值 )

* 0xcccccccc : Used by Microsoft's C++ debugging runtime library to mark uninitialised stack memory * 0xcdcdcdcd : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory * 0xfeeefeee : Used by Microsoft's HeapFree() to ma