GDI+应用】的更多相关文章

本篇主题内容是.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> /…
尝试用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).是的,没错,进程暂停一小段时间.这个可以彻底解决内…
1.载解压GDI+开发包: 2.正确设置include & lib 目录: 设置如下:VC6.0编译器菜单Tools->Options->Directories中添加inlude files和Library files对应的文件夹(前提是你下载了GDI+的开发包,放到对应的文件夹中) 3.在stdafx.h中添加: #define ULONG_PTR ULONG #include <gdiplus.h> #pragma comment(lib, "gdiplus.…
MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 { 3 string s = "123"; 4 Response.Write(getMd5(s)); 5 } 6 public string getMd5(string str) 7 { 8 MD5 md5 = MD5.Create();//MD5抽象类无法实例化 实例化该方法 9 byt…
在Visual Studio 2010中定义GDI+自定义控件——自定义控件介绍 http://www.cnblogs.com/zhangdong/archive/2010/05/20/1740177.html C#发现之旅第一讲 C#-XML开发C#发现之旅第二讲 C#-XSLT开发C#发现之旅第三讲 使用C#开发基于XSLT的代码生成器C#发现之旅第四讲 Windows图形开发入门C#发现之旅第五讲 图形开发基础篇C#发现之旅第六讲 C#图形开发中级篇C#发现之旅第七讲 C#图形开发高级篇C…
1.Graphics Graphics对象是GDI+绘图表面,因此在Windows窗体应用程序中要使用GDI+创建绘图,必须要先创建Graphics.在给窗体注册一个Paint事件后,Graphics的创建方式有以下三种. 1)直接获取Paint事件的PaintEvenlArgs中Graphics对象(最常用). private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g1 = e.Graphics; } 2)从I…
错误的代码g对象继续占用 未释放资源 如果路径不一样 没问题 相同路径 获取图片进行 缩略会造成GDI错误 /// <summary> /// 生成缩略图 /// </summary> /// <param name="originalImagePath">源图路径(物理路径)</param> /// <param name="thumbnailPath">缩略图路径(物理路径)</param>…
在我们制作一个应用软件的时候往往需要在窗口或控件中添加背景图.而图片不仅有BMP格式的,还有JPEG.PNG.TIFF.GIF等其它的格式.那么如何用jpg格式的图片来当背景呢? 这里用到了GDI+,顾名思义,其实GDI+是对GDI的优化,在GDI的甚础上添加了其它的许多功能,其中就包括“多种图像格式的支持”. 下面且看在MFC中是如何用GDI+来显示图片的. ====================================================================…
今天有人在QQ群里问GDI能不能支持带alpha通道的线条绘制? 大家的答案当然是否定的,很多人推荐用GDI+. 一个基本的图形引擎要包括几个方面的支持:位图绘制,文字绘制,矢量绘制(如矩形,线条). 可惜GDI这个20多年前发明的老古董,对这几项的绘制, 除了位图绘制可以通过AlphaBlend支持alpha通道,其他绘制都不支持alpha通道. 那有没有方法让能通过纯GDI让文字和矢量的绘制也支持alpha通道呢? 讨论这个问题之前,我们先看一下用GDI函数在支持alpha通道的DC上绘制会…
UI(User Interface)编程在整个项目开发过程中是个颇为重要的环节,任何好的解决方案若没有良好的用户界面呈现给最终用户,那么就算包含了最先进的技术也不能算是好程序.UI编程体现在两个方面,一是设计精美的用户界面,再有就是符合大多数用户习惯和易于使用的操作流程. 本文主要收集整理一些介绍 .Net 框架的基本绘图技术文章.通过简要的介绍和示例程序来探讨绘图技术的优势.劣势以及其它相关注意事项.(文章及相关代码搜集自网络,仅供学习参考,版权属于原作者! ) [转]GDI+基础(1) [转…
学习笔记:利用GDI+生成简单的验证码图片 /// <summary> /// 单击图片时切换图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void pictureBox1_Click(object sender, EventArgs e) { Random r =…
5.1 GDI的原理和结构 (1)提供一种特殊机制彻底隔离应用程序与不同输出设备(eg.显示器或打印机),以便支持 与设备无关的图形. 光栅设备(如显示器.激光打印机):图像是由点构成的矩阵 图形输出设备 矢量设备(如绘图仪):使用 线条来绘制图形 (2)Windows GDI允许使用逻辑坐标系统来保证程序与硬件的独立,也可以统用设备坐标系统 (单位:像素)来迎合硬件的需求. (3)GDI总体上是一个静态显示系统,对动画的支持有限.DirectX可支持动画. 5.2 设备环境 5.2.1 获取设…
14.4.1 创建DDB (1)创建 HBITMAP= CreateBitmap(cx,cy,cPlanes,cBitsPixel,lpBits); 参数 说明 cx,cy 指定位图宽度和高度,单位为像素. cPlanes 颜色平面数目.标准的VGA显卡具有4个连续的颜色平面,每个平面取一个对应位,把它们组合起来就是一个像素.但这样被创建出来的位图被限制为标准的16位. cxBits 每个像素点颜色的位数 lpBits 指向颜色数据数组指针.每行的字节数必须是偶数个字节(不足时以0填充).如果该…