• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > c#扫描图片去黑边(扫描仪去黑边)

c#扫描图片去黑边(扫描仪去黑边)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#调用扫描仪,c#扫描仪,扫描仪零边距,扫描仪黑边,扫描仪扫出来有黑边等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

自动去除图像扫描黑边

            RemoveBlackEdge(bmp);
            //保存图像
            SaveImage(bmp, fileName);
        }

        private static byte[] rgbValues; // 目标数组内存

        /// <summary>
        /// 图像去黑边
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns></returns>
        private static Bitmap RemoveBlackEdge(Bitmap bmp)
        {
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, bmp.PixelFormat);

            // 获取图像参数 
            int w = bmpData.Width;
            int h = bmpData.Height;
            int stride = bmpData.Stride;  // 扫描线的宽度
            double picByteSize = GetPicByteSize(bmp.PixelFormat);
            int bWidth = (int)Math.Ceiling(picByteSize * w); //显示宽度
            int offset = stride - bWidth;  // 显示宽度与扫描线宽度的间隙 
            IntPtr ptr = bmpData.Scan0;   // 获取bmpData的内存起始位置 
            int scanBytes = stride * h;  // 用stride宽度,表示这是内存区域的大小

            // 分别设置两个位置指针,指向源数组和目标数组 
            int posScan = 0;
            rgbValues = new byte[scanBytes];  // 为目标数组分配内存 
            Marshal.Copy(ptr, rgbValues, 0, scanBytes);  // 将图像数据拷贝到rgbValues中 

            bool isPass = true;
            int i = 0, j = 0;
            int cutW = (int)(bWidth * 0.02); //2%宽度(可修改)
            int cutH = (int)(h * 0.02);      //2%高度(可修改)
            int posLen = (int)(picByteSize * 8); //继续查找深度为8的倍数(可修改)
            //左边
            for (i = 0; i < h; i++)
            {
                for (j = 0; j < bWidth; j++)
                {
                    isPass = true;
                    if (rgbValues[posScan] < 255) rgbValues[posScan] = 255;

                    if (rgbValues[posScan + 1] == 255)
                    {
                        for (int m = 1; m <= posLen; m++)
                        {
                            if (rgbValues[posScan + m] < 255) isPass = false;
                        }
                    }
                    if (rgbValues[posScan + 1] < 255 || bWidth / 2 < j) isPass = false;
                    recCheck(ref rgbValues, posScan, h, stride, true);

                    posScan++;
                    if (j >= cutW && isPass) break;
                }
                // 跳过图像数据每行未用空间的字节,length = stride - width * bytePerPixel 
                if (j == bWidth) posScan += offset;
                else posScan += (offset + bWidth - j - 1);
            }
            //右边
            posScan = scanBytes - 1;
            for (i = h - 1; i >= 0; i--)
            {
                posScan -= offset;
                for (j = bWidth - 1; j >= 0; j--)
     &n

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • c#扫描图片去黑边(扫描仪去黑边)

相关文章

  • 2017-05-28C#实现文件上传以及多文件上传功能
  • 2017-05-28在winform下实现左右布局多窗口界面的方法
  • 2017-05-28C#程序最小化到托盘图标操作步骤与实现代码
  • 2017-05-28C#中的DateTime是值类型还是引用类型
  • 2017-05-28C#使用虚拟方法实现多态
  • 2017-05-28C# 抓取网页内容的方法
  • 2017-05-28C# 获取程序集版本、文件版本
  • 2017-05-28C#中执行批处理文件(*.bat)的方法代码
  • 2017-05-28C#生成不重复随机数列表实例
  • 2017-05-28C#中把字符串String转换为整型Int的小例子

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#自定义事件监听实现方法
    • C#在Unity游戏开发中进行多线程编程的方法
    • C#中Property和Attribute的区别实例详解
    • c#保存窗口位置大小操作类(序列化和文件读写功能)
    • C#时间戳基本用法实例分析
    • 读写XML文件的内容并将其显示在ListView控件上的方法
    • C#打包应用程序,与.NETFramework介绍
    • C#中使用1.7版本驱动操作MongoDB简单例子
    • DataTables List互相转换的实现类示例
    • 简单记录C# 条件编译

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有