朋友Zgke向我提供的有关截图和去除背景的源代码,大家有什么更好的意见或建议,交流交流
2011-10-07 15:46
615 查看
我想把
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/13/695acc0bf1b2971e8445d270873cad7e.gif)
当中的红色给截取出来,并把红色部分背景去掉
一下是朋友提供的代码:
只在一个Program.cs中,注意文件路径和名称对应(如果你要试试程序的正确性)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201911/13/695acc0bf1b2971e8445d270873cad7e.gif)
当中的红色给截取出来,并把红色部分背景去掉
一下是朋友提供的代码:
只在一个Program.cs中,注意文件路径和名称对应(如果你要试试程序的正确性)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices ; namespace Zgkeprogram { class Program { static void Main(string[] args) { Bitmap _NewBitmap = (Bitmap)Image.FromFile(@"C:\Documents and Settings\Administrator\桌面\eegtest.bmp");//从指定的位置创建原始图像 //创建图形数据 BitmapData _Data = _NewBitmap.LockBits(new Rectangle(0, 0, _NewBitmap.Width, _NewBitmap.Height), ImageLockMode.ReadOnly, _NewBitmap.PixelFormat); //创建一行RGB数据流 大小为_Data.Stride 一行 byte[] _ColorBytes = new byte[_Data.Stride]; //第1行的开始位置是 _Data.Scan0 图形第1行是黑色的无法使用 使用第2行 _StartPtr 为第2行的开始位置 IntPtr _StartPtr = new IntPtr(_Data.Scan0.ToInt32() + _Data.Stride); //复制数据到RGB流 Marshal.Copy(_StartPtr, _ColorBytes, 0, _Data.Stride); //释放锁定 _NewBitmap.UnlockBits(_Data); int _StartWidth = 0; //红色的开始位置 bool _StartBool = true;//用于判断开始位置是否找到 int _EndWidth = 0;//红色的结束位置 bool _EndBool = true;//用于判断结束位置是否找到 int _EndIndex = _ColorBytes.Length - 1; //结束位置的索引 switch (_NewBitmap.PixelFormat) { case PixelFormat.Format32bppArgb://颜色的深度 32位==4byte[] for (int i = 0; i != _NewBitmap.Width; i++) { if (_StartBool) {//数据流为 B G R A B G R A B G R A B G R A ........ B G R A 如果颜色 R>=200 并且 G B 都小于50 就认为是红色 if (_ColorBytes[i * 4 + 2] >= 200 && _ColorBytes[i * 4 + 1] <= 50 && _ColorBytes[i * 4] <= 50) { _StartWidth = i;//记录开始位置 _StartBool = false; //下次循环执行不在取位置 } } if (_EndBool) {//这个和上面的不同 是倒这取B G R A 去行的最后开始向前循环 结束位置的索引 -1为R -2为G -3为B 判断规格同上 if (_ColorBytes[_EndIndex - (i * 4) - 1] >= 200 && _ColorBytes[_EndIndex - (i * 4) - 2] <= 50 && _ColorBytes[_EndIndex - (i * 4) - 3] <= 50) { _EndWidth = _NewBitmap.Width - i;//记录结束位置 _EndBool = false; } } if (!_EndBool && !_StartBool) break; } break; } //创建新的图形 区域为 红色的开始位置 0 红色的结束位置-红色开始位置 图形高 Bitmap _SaveBitmap = _NewBitmap.Clone(new Rectangle(_StartWidth, 0, _EndWidth - _StartWidth, _NewBitmap.Height), _NewBitmap.PixelFormat); _SaveBitmap.Save(@"C:\Documents and Settings\Administrator\桌面\111.bmp"); _SaveBitmap.MakeTransparent(Color.Red);//去掉红色背景色。 _SaveBitmap.Save(@"C:\Documents and Settings\Administrator\桌面\123.bmp"); } } }
相关文章推荐
- 第一次写博客,大家有什么意见或建议可以留言
- 什么是去耦电容?什么是旁路电容?嵌入式芯片为什么提供许多AVDDx电源?电感去除交流的等效表示
- 重新启用原来的百度空间,欢迎大家多多留言啊,有什么建议和意见尽管提,这个空间就做为技术文章收集地了以后
- 大家有什么意见和建议往这里发吧
- 发一个项目的几张截图.提供大家一些视野.
- 上海酒店预订网_提供很多特价酒店预定,是我朋友的网站所以我推荐大家到上海就去他那订酒店
- 强烈收集意见和建议:试验项目,已经着手规划,欢迎朋友给我意见,诚挚的谢意[原创]
- 看看一个朋友写的代码,大家发表发表意见,比较简单的代码
- 给大家分享下隐藏整个界面软键盘的方法,如果大家有更好的方法也建议下,谢谢了
- 昨天与朋友晚上交流,我教给他一个我自己针对APPSTORE市场的自我锻炼法。我总结一下分享给大家。
- 一个建议,看看大家的意见。
- 学习jsp,大家有什么好的建议。
- 什么是理想,理想就是创造和实现,而高层次高境界的理想是追求和达到自我精神中的一种释放,以及对自己的满意程度。怎样让自己活得更好,四个字就可以概括,我想大家应该有自已的答案!
- 我想写个bbs,都需要些什么模块呀?大家给点建议!
- 对于数据访问层的内部层结构,大家有什么意见可以一起发表讨论讨论!
- 大学创建学习团队,准备好好发展,不知道大家有没有什么建议
- 准备将《C/C++函数与算法速查手册》改版,欢迎大家多提宝贵意见,有什么错误欢迎指正,谢谢
- 邮件主机的一些问题。希望大家提供好的意见
- 有志于webgl, three.js编程的朋友进入群52391108,72579998,共同学习提高,本人提供学习相关的资料,webgl,three.js学习,交流的论坛www.webglchina.cn
- 做技术的,因为年龄和颈椎问题,想逐渐脱离码农状态,大家对30-35岁职业规划有什么好的建议? - 知乎