GDI+入门(C#高速处理版本)

基于台达PLC与C# GDI+的步进电机轨迹可视化系统设计 本文详细介绍了基于台达PLC与C# GDI+的步进电机轨迹可视化系统设计。该系统通过台达PLC实现精确的步进电机控制,并利用C# GDI+技术在上位机中实时显示运动轨迹,显著提升工业自动化调试效率。文章涵盖硬件配置、通信协议、运动控制程序设计及可视化界面开发等关键技术要点,为工程师提供了一套完整的解决方案。 阅读详情

首先感谢优快云的朋友laviewpbt为我给我的建议。

 

laviewpbt提出使用getpixel处理速度太慢,上不了档次。

 

这里我再给大家写两种处理速度更快的图形处理方式。

 

下面是个内存操作灰度的程序:


bmp = new Bitmap(Application.StartupPath + "//1.jpg");
            Bitmap bmp2
= (Bitmap)bmp.Clone();
           
int width = bmp2.Width;
           
int height = bmp2.Height;
            Rectangle rect
= new Rectangle(0, 0, width, height);
           
//用可读写的方式锁定全部位图像素
            BitmapData bmpData = bmp2.LockBits(rect, ImageLockMode.ReadWrite, bmp2.PixelFormat);
           
//得到首地址
            IntPtr ptr = bmpData.Scan0;
           
//24位bmp位图字节数
            int bytes = width * height * 3;

           
byte[] rgbValues = new byte[bytes];

            Marshal.Copy(ptr, rgbValues,
0, bytes);

           
//灰度化
            double colorTemp = 0;
           
for (int i = 0; i < bytes; i += 3)
            {
                colorTemp
= rgbValues[i + 2] * 0.299 + rgbValues[i + 1] * 0.587 + rgbValues[i] * 0.114;
                rgbValues[i]
= rgbValues[i+1] = rgbValues[i+2] = (byte)colorTemp;
            }
           
//还原位图
            Marshal.Copy(rgbValues, 0, ptr, bytes);
            bmp2.UnlockBits(bmpData);
            Graphics g
= this.CreateGraphics();
            g.DrawImage(bmp2,
new Rectangle(410, 0, 200, 200));
            g.Dispose();
            bmp2.Dispose();


够仔细的朋友很容易看出,其实我们只是把图像的像素点放到内存中处理了。我们知道在内存中处理肯定是最快的了。

 

下面再写一个用指针的

 

bmp = new Bitmap(Application.StartupPath + "//1.jpg");
            Bitmap bmp2
= (Bitmap)bmp.Clone();
           
int width = bmp2.Width;
           
int height = bmp2.Height;
            Rectangle rect
= new Rectangle(0, 0, width, height);
           
//用可读写的方式锁定全部位图像素
            BitmapData bmpData = bmp2.LockBits(rect, ImageLockMode.ReadWrite, bmp2.PixelFormat);
           
byte temp = 0;
           
//启用不安全模式
            unsafe
            {
               
//获取首地址
                byte* ptr = (byte*)(bmpData.Scan0);
               
//二维图像循环
                for (int i = 0; i < bmpData.Height; i++)
                {
                   
for (int j = 0; j < bmpData.Width; j++)
                    {
                        temp
= (byte)(0.299 * ptr[2] + 0.587 * ptr[1] + 0.114 * ptr[0]);
                        ptr[
0] = ptr[1] = ptr[2] = temp;
                        ptr
+= 3;
                    }
                   
//指针移向下一行数组的首个字节
                    ptr += bmpData.Stride - bmpData.Width * 3;
                }
                bmp2.UnlockBits(bmpData);
            }
            Graphics g
= this.CreateGraphics();
            g.DrawImage(bmp2,
new Rectangle(615, 0, 200, 200));
            g.Dispose();
            bmp2.Dispose();

C#默认不能使用指针操作,所以我们使用了unsafe(不安全模式),注意:使用不安全模式调试时需要配置VS,在项目的属性内设置启用不安全模式调试

本人也在学习GDI+,写得比较简单,让高手见笑了。欢迎高手给我指点

邮箱:bobui@163.com

QQ:125941562

VC++实现高性能示波器波形图控件:GDI双缓冲与坐标映射实战 在桌面软件开发中,自定义控件是实现特定功能模块的核心技术。其原理在于通过底层图形接口直接操作像素,实现对界面元素的精细控制,从而在性能要求苛刻的场景中发挥关键价值。这项技术广泛应用于工业控制、数据采集和科学可视化等领域,尤其在对实时性有极致要求的波形显示中至关重要。本文聚焦于使用VC++与GDI/GDI+技术,深入探讨如何构建一个高性能的示波器波形图控件,其中双缓冲技术是解决画面闪烁、保证流畅渲染的关键,而高效的坐标映射算法则是实现波形缩放、平移等交互功能的基础。通过结合实时数据处理与图形渲染优化,开发者能 阅读详情

相关推荐

C#自定义进度条控件开发:实现流畅动画与高级视觉效果

在桌面应用开发中,进度条是提供用户反馈的核心UI组件。其原理基于将后台任务进度可视化,通过图形渲染技术将数值映射为视觉元素。技术价值在于提升应用的专业度和用户体验,流畅的动画能有效缓解等待焦虑。在C# WinForms/WPF开发中,系统自带控件常存在卡顿、样式单一等问题。通过自定义绘制、双缓冲技术、动画插值算法和线程安全更新机制,开发者可以构建高性能进度条。本文深入探讨了GDI+绘图、临界阻尼弹簧模型等核心技巧,并展示了如何实现流动条纹、弹性动画等高级效果,为C#桌面应用开发提供了一套完整的进度条优化方案

weixin_32520095的博客 233

C#动态绘制心率折线图(串口通信)

硬件背景:基于stm32芯片,挂载心率监测传感器通过蓝牙传输数据的 心率监测仪 本文将介绍下如何根据 接收到的数据进行动态绘制心率折线图(大神请绕步,此乃菜鸟分享show) 未完待续...

Veyron_wu 9421

C# GDI+ 非线性插值动画:打造动态交互的视觉盛宴

非线性插值动画通过定义时间与状态之间的非线性关系,使动画更符合自然规律,如缓入、缓出和弹簧效果。其核心在于插值函数的设计,如线性、二次、三次和弹性插值。GDI+绘图与动画结合的关键在于周期性重绘控件并更新动画状态,通过定义动画状态、计算插值系数和触发控件重绘实现平滑效果。动画引擎开发包括动画基类设计、插值函数实现和动画控制器设计,基类负责管理动画的启动和更新,插值函数实现不同的动画效果,控制器则管理多个动画的同步运行。自定义动画控件类通过设置目标位置和启动动画,结合GDI+绘图实现动态效果。

墨夶的博客 1009

C#手写俄罗斯方块:WinForms+GDI+游戏循环与状态机实战

俄罗斯方块是理解游戏开发核心原理的经典教学载体,其背后涵盖有限状态机(FSM)建模、网格坐标系运算、帧同步渲染与输入响应机制等基础能力。通过纯C# WinForms + GDI+实现,可深入掌握游戏主循环控制、双缓冲绘制优化、键盘状态轮询、碰撞检测与消行逻辑等硬核技能。相比Unity或WPF方案,该路径剥离框架抽象,直面像素级渲染、内存布局与CPU缓存行为,特别适合夯实C#桌面开发与实时交互逻辑功底,广泛应用于教学实训、技术面试准备及底层图形编程能力验证场景。

weixin_30420305的博客 602

C# GDI+直线插补运动模拟实战:从数学公式到动态轨迹的编程艺术

摘要 本文介绍了基于逐点比较法和DDA算法的直线插补技术及其在C# GDI+中的实现。直线插补通过离散点逼近理想直线,逐点比较法适用于高精度场景,DDA算法则更适合高速运动。文章详细解析了算法数学原理,并提供了完整的C#代码实现,包括窗体设计、插补逻辑、绘图优化和动态轨迹效果。通过GDI+的高质量渲染和动画优化,开发者可模拟数控机床运动或为游戏添加动态路径,适用于工业自动化和图形编程领域。

墨夶的博客 564

C#实现的机器视觉ROI交互源代码详解

Emgu CV提供了广泛的图像处理和计算机视觉功能。这里重点介绍几个核心功能,包括图像的加载和显示、像素操作、特征检测和图像变换。图像的加载和显示:使用可以加载图像,而用于显示图像。这些是与OpenCV交互的基础。像素操作:通过直接访问图像数据,可以对像素进行操作和分析。Emgu CV提供了许多方法来获取和设置像素值,以及执行像素级的计算。特征检测:Emgu CV支持多种特征检测算法,如SIFT、SURF、ORB等,可以用来识别和匹配图像中的关键点。图像变换。

weixin_29781865的博客 1435

C#System.ArgumentException

我的绘制图片内容大概如下: private Bitmap backGroundImage=null; private Bitmap prospectImage=null; private Graphics graphics = null; /// <summary> /// 在背景上画前景 /// </summary> private void drawProspect() { try { if(prospectImage!=null) //注释

qq996980215的博客 6965

C#小票打印功能实现源码解析与实战

小票打印系统作为连接交易系统与用户凭证服务的核心组件,广泛应用于零售、餐饮、物流等行业的POS终端中。它不仅承担着交易数据的持久化输出职责,还直接影响客户体验的专业性与品牌识别度。现代小票打印系统通常基于Windows平台下的GDI+绘图技术,结合.NET Framework或.NET Core中的命名空间实现精准控制。系统需支持热敏打印机特性,如固定纸宽(58mm/80mm)、无边距打印及高速响应,并兼容条码、二维码、Logo图像等多样化内容混合排版。

weixin_42513928的博客 528

基于C#的波形显示控件的实现

具体实现:根据下位机的指令,实现通过串口来操纵下位机进行实验,并将采集的数据进行处理和保存,并以图形的方式显示。 “基于C#的波形显示控件”设计于09年暑假 源代码:博客园下载 | 优快云下载 解压密码:CSharp_WinForm_Waveform 《基于C#的波形显示控件的实现》写于2009年9月   跳到文章目录(采用锚链接,订阅的朋友可能访问会失效) “基于C#的波

SenlinCao的博客 1万+

WinForm自定义打印设计工具:从GDI+绘图到可视化模板引擎实战

在桌面应用开发中,打印功能是业务系统(如ERP、MES)的核心需求之一,常涉及票据、标签和报表的输出。其原理是通过图形设备接口(如GDI+)将数据渲染到打印设备,实现精准的页面布局与绘制。这项技术的价值在于将打印逻辑与业务数据解耦,提升系统的灵活性和可维护性。在应用场景上,它广泛用于需要动态格式、复杂排版(如包含条形码、表格)或套打需求的业务单据生成。本文聚焦于WinForm平台,深入探讨如何构建一个可视化打印设计工具,通过拖拽式设计器、XML模板序列化和动态数据绑定,解决传统打印代码冗长、修改成本高的痛点

weixin_33951761的博客 339

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 286

别再花钱买控件了!手把手教你用C# Winform从零撸一个工控示波器(附完整源码)

本文详细介绍了如何使用C# Winform从零开发一个工控示波器,通过GDI+绘图技术和双缓冲技术实现高性能波形显示。文章包含完整的源码和优化技巧,帮助开发者掌握底层实现原理,替代昂贵的商业控件,适用于工业自动化领域的信号监控与分析。

weixin_30546189的博客 316

TortoiseGit之配置密钥

基于github的开发必须要用到rsa密钥,因此需要用到TortoiseGit的putty key generator工具,来生成既适用于github的rsa密钥也适用于TortoiseGit的ppk密钥。

欧文的博客 2080

C#高效绘图(转)

双缓冲技术 双缓冲是将图片在显示到DC前,现在要内存建一个DC,也就是用于存储这张图片的内存区,然后在将这部分update到你要显示的地方 这样,可以防止画面抖动很大 这样和你说吧,如果要实现你要的效果,你必须用指针访问内存 比如,把程序声明成unsafe的,然后按照上面的操作进行   this.clear(this.BackColor)不行的 invalida

cuoban的学习空间 4832

AI在个性化营养方案制定中的应用:从代谢组学到膳食规划

本文章的主要目的是全面探讨AI在个性化营养方案制定过程中的应用,从代谢组学的数据收集与分析,到基于这些数据制定合理的膳食规划。范围涵盖了AI技术在该领域的核心概念、算法原理、数学模型、实际项目应用,以及相关的工具和资源推荐等方面。旨在为科研人员、营养师、软件开发人员等提供一个系统的知识体系,帮助他们更好地理解和应用AI技术来实现个性化营养方案的制定。核心概念与联系:介绍AI、代谢组学和膳食规划的核心概念,以及它们之间的相互联系,并通过文本示意图和Mermaid流程图进行展示。

架构师的AI之路,分享AI应用开发架构的学习与实践。 1032

RAGFlow 离线部署:解决cl100k_base.tiktoken问题

摘要 本文详细解决了RAGFlow离线部署时tiktoken缓存文件下载失败的问题。通过分析tiktoken库的缓存机制,一次性不改代码解决.

baidu_25691461的博客 830

水印图片的制作及常用的图像处理(C#)

  水印制作就是简要来说利用GDI+的函数,进行原图和水印图片的合成,或者在原图上配置文字。   水印制作的关键函数: DrawString方法绘制文字。 DrawImage方法绘制图片。 这两个函数有比较多重载,具体请参考MSDN。 说到GDI+,他一般用于Winform对于GUI的绘制,例如桌面上的窗体。其实GDI不仅可以绘制窗体,它可以绘制一切的表面图像。   其中Gra...

weixin_30713953的博客 455

顺序功能图基本结构

顺序功能图(Sequential Function Chart,SFC)是一种用于描述工业控制系统中顺序控制流程的图形化编程语言,广泛应用于PLC(可编程逻辑控制器)编程。其核心思想是将复杂的控制流程分解为多个有序的步骤,通过逻辑条件实现步骤间的切换。顺序功能图通过图形化的方式简化了复杂控制逻辑的设计,尤其适用于需要严格顺序控制的工业自动化场景。[初始步] → 转换条件1 → [步1] → 转换条件2 → [步2] → ...[步X] → → [步B] → 转换条件B → → [合并步]

ayingqin1的博客 1226

从“锯齿”到“丝滑”:深入理解C# GDI+绘图中的SmoothingMode与高质量渲染(附性能对比)

本文深入探讨了C# GDI+绘图中的SmoothingMode属性及其在高质量图形渲染中的应用。通过分析锯齿现象的根源、抗锯齿原理及六种SmoothingMode模式,结合性能对比数据,帮助开发者在WinForms应用中实现从“锯齿”到“丝滑”的视觉优化。文章还提供了高级质量优化组合和性能优化策略,适用于医疗影像、数据可视化等多种场景。

weixin_42528780的博客 206

LaTeX伪代码字体大小调整全攻略:从algorithm到algorithm2e的实战技巧

本文详细介绍了在LaTeX中调整伪代码字体大小的全面技巧,涵盖algorithm、algorithmicx和algorithm2e等主流算法包的使用方法。从基础命令到高级配置,帮助用户解决学术论文和技术文档中的伪代码排版问题,提升算法展示的专业性和可读性。特别针对不同期刊格式要求,提供了实用的字体调整方案。

weixin_29297127的博客 437

CodeBuddy Code CLI 常用工作流:17个实战场景全解析

CodeBuddy Code CLI 17个实战场景解析 本文详细介绍了CodeBuddy Code CLI在17个开发场景中的高效应用,包括: 快速理解新代码库 高效修复Bug 安全重构代码 使用子代理系统处理专业任务 Plan Mode安全分析 自动化测试处理 创建合并请求 文档生成与维护 图片内容分析 文件目录快速引用 每个场景都配有具体命令示例和最佳实践,帮助开发者提升工作效率。

简简单单Onlinezuozuo 1079

C#贪吃蛇实战:从零掌握WinForms游戏开发与面向对象设计

面向对象编程(OOP)是构建复杂软件系统的核心范式,其通过封装、继承和多态等概念组织代码,提升可维护性和复用性。在游戏开发中,OOP原则能有效管理游戏实体的状态与行为,例如将游戏角色、物品抽象为独立对象。C#作为一门现代、强类型的面向对象语言,结合其丰富的.NET生态,是实现这类逻辑的理想选择。通过开发经典的贪吃蛇游戏,开发者能深入实践事件驱动、游戏循环和状态管理等关键技术,将理论知识转化为解决实际问题的工程能力。本项目以WinForms框架为例,详细拆分了蛇身移动、碰撞检测和食物生成等核心模块,并探讨了T

weixin_30314813的博客 327

simulink的电动汽车制动系统热管理仿真

本文系统研究了电动汽车制动系统热管理仿真技术。通过建立机电液多物理场耦合模型,分析了不同工况下的动态热平衡特性。提出基于MPC的动态调节和NSGA-II多目标优化算法,使电池温度波动降低60%。创新性采用石墨烯相变材料与微通道液冷复合技术,冷却系统能耗减少40%。研究构建了完整的工程验证平台,涵盖200kW电制动测试台和高精度热成像系统。展望指出,未来将结合Transformer预测和强化学习算法,进一步优化热管理策略。该研究为电动汽车制动系统热管理提供了从理论建模到工程实施的完整解决方案。

xiaoheshang_123的博客 122

C# WinForm俄罗斯方块开发实战:从数据结构到游戏循环完整解析

桌面应用开发的核心在于理解UI绘制、事件处理与状态管理的协同机制。通过游戏循环(如定时器驱动)实现状态更新与渲染分离,是构建流畅交互应用的基础原理。这种模式在游戏和工具软件开发中具有广泛的技术价值,能有效管理复杂状态并响应用户输入。以经典游戏俄罗斯方块为例,其实现完美融合了二维网格数据模型、碰撞检测算法和实时渲染技术。本文将深入探讨如何运用C#与GDI+,从零构建一个完整的俄罗斯方块游戏,涵盖游戏区域与方块的数据结构设计、基于定时器的游戏主循环实现,以及键盘控制与行消除等核心功能模块。通过这个项目,开发者不

hqmln的博客 438

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#车牌识别系统5大内存陷阱与优化方案

在计算机视觉与多线程编程领域,内存管理与资源回收是保证系统稳定性的核心技术难点。以车牌识别系统为例,其典型技术架构涉及图像采集、字符分割、OCR识别等多个计算密集型环节,对异步任务调度和对象生命周期管理提出严峻挑战。通过分析实际工程案例发现,未释放的Bitmap对象会导致GDI+句柄泄漏,失控的异步任务可能引发内存持续增长,这些问题在200+并发场景下会显著降低识别准确率。合理运用CancellationToken机制、ReaderWriterLockSlim锁优化以及文化敏感的字符串比较等方法,可使系统在

weixin_30647065的博客 388

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: GDI+入门(十七、GDI+实例——油画效果)
下一篇: 股票模拟交易软件(二:交易终端)待续
bobui
博客等级 码龄19年 209粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值