php 去除图片黑边,C#_c#扫描图片去黑边(扫描仪去黑边),自动去除图像扫描黑边复制代 - phpStudy...

///

/// 自动去除图像扫描黑边

///

///

public static void AutoCutBlackEdge(string fileName)

{

//打开图像

Bitmap bmp = OpenImage(fileName);

RemoveBlackEdge(bmp);

//保存图像

SaveImage(bmp, fileName);

}

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

///

/// 图像去黑边

///

///

///

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--)

{

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, false);

posScan--;

if (cutH < (h - i))

if (j < (bWidth - cutW) && isPass) break;

}

// 跳过图像数据每行未用空间的字节,length = stride - width * bytePerPixel

if (j != -1) posScan -= j;

}

// 内存解锁

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

bmp.UnlockBits(bmpData);  // 解锁内存区域

return bmp;

}

///

/// 上下去除黑边时,临近黑点去除

///

///

///

///

///

///

private static void recCheck(ref byte[] rgbValues, int posScan, int h, int stride, bool islLeft)

{

int scanBytes = h * stride;

int cutH = (int)(h * 0.01); //临近最大1%高度(可修改)

for (int i = 1; i <= cutH; i++)

{

int befRow = 0;

if (islLeft && (posScan - stride * i) > 0)

{

befRow = posScan - stride * i;

}

else if (!islLeft && (posScan + stride * i) < scanBytes)

{

befRow = posScan + stride * i;

}

if (rgbValues[befRow] < 255) rgbValues[befRow] = 255;

else break;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用和引用提供了关于在phpstudy中安装php扩展的指南。根据这些指南,你可以将php_yaf.dll文件放置在phpstudyPHP路径下,在php.ini文件中手动添加extension=yaf的配置。具体来说,你可以将php_yaf.dll文件复制到D:\phpstudy_pro\Extensions\php\php7.3.4nts\ext路径下,并在php.ini文件中添加extension=yaf配置项。这样就可以在phpstudy的面板中启用yaf扩展了。引用则提供了一个可能导致问题的原因,即项目使用的php版本与cmd的版本不兼容。你可以通过检查项目使用的php版本是否与phpstudy中的版本一致来确认这一点。如果版本不一致,可以在phpstudy中切换php版本或者调整项目的php版本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [阿里云服务下安装Composer时出现 错误:添加到用户路径:C:/phpStudy/Extensions/php/php7.3.4nts 安装无法...](https://blog.csdn.net/qq_42345116/article/details/122595160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [php7.3.4可用yaf扩展下载phpstudy小皮面板php_yaf.dll(亲测100%可用)](https://download.csdn.net/download/lingyun820/16593737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [执行php命令行出现 Failed loading D:\phpStudy\php\php7.3.4nts\ext\php_xdebug.dll](https://blog.csdn.net/weixin_42079053/article/details/105618234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值