深入GDI图像显示】的更多相关文章

摘  要:本文首先给出了一种结合了DIB和DDB两种位图优点的图像显示方法,其次对GDI函数的高级应用,如透明位图显示.图像旋转显示.图像镜像显示进行了研究. 关键词:GDI图像显示,特殊GDI函数的应用,透明位图显示,图像几何变换显示 图像信息是人类认识世界的重要知识来源,人类获得的70%以上的信息来自于眼睛摄取的丰富和真切的图像.图像与计算机相结合带给人们近乎神奇的图像艺术.对于程序开发者来说,实现高速的绘图是设计漂亮友好的用户界面的基础和关键所在. 在Win32图像程序设计中,图像显示的方…
某位网友曾经问过我GDI+中Gif图像显示的问题,一直没时间给你写,在此致歉.我把这篇文章送给他. 一.GIF格式介绍 1.概述 GIF(Graphics Interchange Format,图形交换格式)文件是由 CompuServe公司开发的图形文件格式,版权所有,任何商业目的使用均须 CompuServe公司授权. GIF图象是基于颜色列表的(存储的数据是该点的颜色对应于颜色列表的索引值),最多只支持8位(256色).GIF文件内部分成许多存储块, 用来存储多幅图象或者是决定图象表现行为…
一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1  绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗口正常显示.刷新过程中会导致所有图元重新绘制, 而各个图元的重绘操作并不会导致Paint事件发生,因此窗口的每一次刷新只会调用Paint事件一次.窗口刷新一次的过程中,每一个图元的重绘都会立即显示到窗口, 因此整个窗口中,只要是图元所在的位置,都在刷新,而刷新的时间是有差别的,闪…
传统的Win32通过GDI提供图形显示的功能,包括了基本的绘图功能,如画线.方块.椭圆等等,高级功能包括了多边形和Bezier的绘制.这样app就不用关心那些图形学的细节了,有点类似于UNIX上的X-window协议.你信或者不信,那些看上去很花哨的控件,其实就是一笔一划画上去的而已.GDI提供了画笔(用于线条).画刷(用于填充).调色板(用于支持256色显示).字体(用于文字).如果简单的图形不足以表达,你可以使用位图和画布(DC,设备上下文)直接将图像绘制到屏幕上去.此外,GDI还支持一些简…
原文链接:http://blog.csdn.net/poem_qianmo/article/details/7333886 GDI(Graphics Device Interface) 图形设备接口,掌管了所有显像设备的图像显示及输出功能.Windows系统现在的图形操作环境都是他的功劳. Ⅰ.坐标与DC *创建一个窗口,显示的屏幕上便划分出三个区域,即屏幕区(Screen),窗口区(Window)与内部窗口区(Client): * Device Context (设备内容)即DC,DC就是程序…
关于图像显示有很多库可以用,Windows下有GDI,GDI+,D3D等,Linux下有X Window和Wayland,此外还有OpenGL ,SDL等图形库以及各种GUI库. 了解最原始的方式,对于加深理解依然是有帮助的.下面给Windows和Linux下显示位图的最简单例子: Windows用GDI显示图像的例子: /* * FileName: Image_Win.c * Usage: tcc -luser32 -lgdi32 -run Image_Win.c */ #include <w…
在使用gdi技术画图时,有时会发现图形线条不够流畅,或者在改变窗口大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!)                                                                                                                                                                              …
第1章 创建窗口 步骤: 窗口类的设计 窗口类的注册 窗口的正式创建 窗口的显示与更新 消息循环体系 窗口过程函数处理消息 1. 设计:使用WNDCLASSEX结构体,这里注意的是C++中的结构体中的成员默认是共有的,所以可以直接通过 . 来调用. typedef struct tagWNDCLASSEX { UINT cbSize; //UINT类型的cbSize,表示该结构体的字节数大小 UINT style; //指定窗口的风格样式 WNDPROC lpfnWndProc; //指向窗口过…
关于图像显示有很多库可以用,Windows下有GDI,GDI+,D3D等,Linux下有X Window和Wayland,此外还有OpenGL ,SDL等图形库以及各种GUI库. 了解最原始的方式,对于加深理解依然是有帮助的.下面给Windows和Linux下显示位图的最简单例子: 1.Windows用GDI显示图像的例子: /* * FileName: Image_Win.c * Usage: tcc -luser32 -lgdi32 -run Image_Win.c */ #include…
本篇主题内容是.NET GDI+图形图像编程系列的教程,不要被这个滚动条吓到,为了查找方便,我没有分开写,上面加了目录了,而且很多都是源码和图片~ (*^_^*) 本人也为了学习深刻,另一方面也是为了分享给大家,纯手工码了好几天的字,喜欢的表忘了点赞哦~给点小小的动力~ 超全面的.NET GDI+图形图像编程教程 目录: <GDI+绘图基础> 1 GDI+概述 2 Graphics类 2.1 Graphics类的方法成员 2.2 引用命名空间 3 常用画图对象 3.1 Pen类 3.2 Col…
双缓冲在GDI+里可以有效的提高描画效率.改善显示的质量. 下面的代码是一个最简单的双缓冲的模板.可以根据需要,做简单的修改即可. Bitmap CacheImage( [Width], [Height] );      Graphics CacheGraphics( &CacheImage );       // 对CacheImage进行描画      // ......            // 获得窗口的Graphics对象      Graphics Graphic( [ Windo…
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁. 先来谈谈闪烁产生的原因 原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期. 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的. 这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看…
只为了记录下自己的学习历程,方便日后查看 现在开始言归正传,以下为其完整代码附上 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Fo…
本文主要介绍如何使用GDI+对图片进行格式转换,可以转换的图片格式为bmp.jpg.png. 1.加载GDI+库 GDI+是GDI图形库的一个增强版本,提供了一系列Visual C++ API.为了使用GDI+,需要在工程中包含“GdiPlus.h”头文件,并加载“gdiplus.lib”库文件. 具体实现方法为,下载GDI+库,将下载得到的Gdiplus文件夹放到工程中.Gdiplus文件夹中应当包含有“GdiPlus.h”等一系列头文件.Gdiplus.lib库文件和Gdiplus.dll动…
最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大概介绍一下原因,GDI画矩形框就不说了,很简单的.这里面最主要的就是滚轮放大和左键移动两个事件,要计算矩形框的坐标位置.下面将代码贴出如下: 先是定义需要的变量,就四个变量. //矩形框坐标        private Rectangle DrawRect = new Rectangle(0, 0…
上两篇我们学习了文本字符输出以及Unicode编写程序,知道如何用常见Win32输出文本字符串,这一篇我们来学习Windows编程中另一个非常重要的部分GDI图形绘图.Windows的GDI函数包含数百个API可供我们使用,本篇把最常用的GDI绘图做一个讲解.GDI可以绘制点.直线曲线.填充封闭区域.位图以及文本,其中文本部分已经在上一篇中将了,请参考[Windows编程]系列第三篇:文本字符输出. 跟前面的GDI对象一样,本篇的这些绘图函数也必须要设备上下文句柄(HDC)作为函数参数,从前文我…
1.GDI+模板 #include<windows.h> #include<GdiPlus.h> #include <time.h> #include <math.h> #pragma comment(lib,"gdiplus.lib") //链接GDI+库 #define WINDOW_CLASS L"GdiWindows" #define WINDOW_NAME L"GdiTemplate" #…
解决思路: 1. 因为 .net GDI+ 是对底层 的封装. 所以可以尝试用 Marshal.GetLastWin32Error();函数获得底层错误代码. try{ image.Save(filename, System.Drawing.Imaging.ImageFormat.Png); } catch (Exception exp) { var code = Marshal.GetLastWin32Error(); throw new Exception(exp.Message + ":&…
在做绘图相关工作,由于对显示绘制结果实时性有要求,筛选了GDI , 与GDI+ 贴图性能. 这里假设在内存中已绘制完成一张图片,现需求显示在控件上,同时,总是更新全部区域. GDI+ 实现 private void PainDraw(Bitmap bitmap) { pictureBox1.Invalidate(); //只调用Invalidate() 并非实时更新, 它会合并多个无效区,且延时显示, Update() 强制更新 pictureBox1.Update(); } private v…
现有一种场景,鼠标移动时,假设鼠标坐标为 X , Y , 需实时在 坐标 (X , 0) , (0 , Y) 两处更新内容. 方案一:增加两个label ,或其它控件,鼠标移动时,实时更新 label 坐标区域 , 及内容. MouseMove 事件代码: lblX.Location = ); lblY.Location = , e.Y); lblX.Text = e.X.ToString(); lblY.Text = e.Y.ToString(); 经过检单测式,鼠标移动时,CPU 升到 10…
做水印图片的时候,发现WPF的System.Windows.Shapes类有绘制直线,椭圆等形状.却没有绘字符串的类. 无奈之下又用回GDI+ 发生的GDI+一般性错误初步估计的线程的原因. 在load事件加载不会出一般性错误.由于业务的要求,这个是放在一个定时刷新的事件里面. 用了 DispatcherTimer 与System.Timers.Timer都是无法解决这个问题.写了委托.也没用......当时心真的是凉了半截.折腾了4小时. 最后终于找到了下面那个把图片转换的方法.才搞定....…
要实现这样一段逻辑,用GPU画3D图,用GDI画二维图元,怎么样效率高.相传Vista年代,是这样干的: 硬件渲染的东西在GPU上做完 读回CPU端 把GDI这些用软件渲染 两者混合 拷贝到显存显示 这样的话,相当于整个屏幕都要维持2份拷贝,并且要互相同步.早期的vista驱动上,D3D/OGL和GDI混合使用的话闪得要死或者慢的要死,就是这个原因. 于是新的wddm要求驱动提供overlay和blt,所以流程变得很简单高效: 硬件渲染的东西在GPU上做完 把GDI这些用软件渲染 BitBlt到…
说明,在这里决定跳过第二章,实在是因为里面涉及的内容太理论,对我而言又太艰深 3.1 HANDLES AND OBJECT-ORIRNTED PROGRAMMING In normal object-oriented programming practice,information hiding is achieved by declaring certain members as private or protected,so the client side code can't access…
解决前面的问题.实现鼠标移动进入到按钮的特效. 效果是这样的 鼠标移到按钮上,改变按钮的颜色(这里用的是直接换贴在按钮上的图片) 程序运行 鼠标进入按钮 代码 #ifndef ULONG_PTR //#define ULONG_PTR unsigned long* #endif #include <windows.h> #define _WIN32_WINNT 0x0500 #include<Winuser.h > //#include <objidl.h> #incl…
一.解决上一篇的两个问题. 1.按钮背景透明 方法是,在绘制按钮之前,向按钮的父窗口发生WM_CTLCOLORBTN消息.该消息返回一个画刷句柄,系统使用该画刷句柄画出按钮的背景.所以我们在处理这个消息的时候,为系统返回一个空的画刷句柄就可以了. 直接在回调函数中添加代码 case WM_CTLCOLORBTN: { HBRUSH hBrush; //hBrush = CreateSolidBrush(RGB(255, 0, 0)); hBrush=(HBRUSH)GetStockObject(…
第一次写随笔,我本来想将win32窗口的标题栏设置成渐变色,像这样的效果 但发现找不到设置标题栏属性的api,SetWindowLong也只是增减窗口的固定的样式而已.所以想到一个思路,把标题栏去掉,自己绘制一个标题栏,包括标题栏上的按钮都自己来绘制创建.这里用到了gdi+,对于这个库也是刚接触到的. 最后程序实现的效果如下. 代码: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include <windows.h> /…
HTML 图像显示:图像标签:<img>,源属性:Src<img>是空标签,没有闭合标签,它只包含属性:显示图像时需要调用源属性src:src的值是图像的地址:语法:<img src="url" /> 替换文本属性(alt)<img src="boat.gif" alt="big boat">在浏览器无法载入图像时,替换文本属性告诉读者她们失去的信息.此时,浏览器将显示这个替代性的文本而不是图像.为…
尝试用windows GDI实现了一个简单的软光栅化渲染器,把OpenGL渲染管线实现了一遍,还是挺有收获的,搞清了以前一些似是而非的疑惑. ----更新2015-10-16代码已上传.gihub地址:https://github.com/wantnon2/gdi3d qq群:519196868 ----更新2015-10-141,实现了线框模式的精确消隐.2,实现了纹理双线性滤波.3,添加了镜面光.截图: ----2015-10-9做了有一周了,现在已经实现了主要功能.过几天等有时间我会将实现…
循环大量图片的时候会报出GDI+内存不足的问题,这个问题困扰了我很久,下面是我的几个解决方案: 使用using(){}代码块来定义需要释放内存的变量.using代码块会在代码结束的时候释放变量,但是并不能彻底解决. 使用GC.Collect()启动.NET自身的内存回收.但是这里注意,不要所有循环完毕了之后再回收,这样起不到任何效果,要每次循环结尾的时候回收.但是这个仍然不能彻底的解决问题. 这是最关键的一步!Thread.Sleep(500).是的,没错,进程暂停一小段时间.这个可以彻底解决内…
http://www.bkjia.com/Androidjc/929473.html: 问题追踪:ImageView执行缩放动画ScaleAnimation之后,图像显示不全的问题., 问题:我有一个ScrollView,嵌套了一个垂直向的LinearLayout,然后这个LinearLayout中有多个ImageView控件,分别显示自己的图像. 接着我新建了一个放大的ScaleAnimation动画,然后设置给LinearLayout或ScrollView.现在我通过监听ScrollView…