C#获取指定坐标点像素,效率更高快
实际使用
Color actualcolor = pointBitmap.GetPixel(nowx, nowy);
if (actualcolor.R < 20 && actualcolor.G < 20 && actualcolor.B < 20)//黑点
{}
类库PointBitmap
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace DianZhen
{public class PointBitmap{Bitmap source = null;IntPtr Iptr = IntPtr.Zero;BitmapData bitmapData = null;public int Depth { get; private set; }public int Width { get; private set; }public int Height { get; private set; }public PointBitmap(Bitmap source){this.source = source;}public void LockBits(){try{// Get width and height of bitmapWidth = source.Width;Height = source.Height;// get total locked pixels countint PixelCount = Width * Height;// Create rectangle to lockRectangle rect = new Rectangle(0, 0, Width, Height);// get source bitmap pixel format sizeDepth = System.Drawing.Bitmap.GetPixelFormatSize(source.PixelFormat);// Check if bpp (Bits Per Pixel) is 8, 24, or 32if (Depth != 8 && Depth != 24 && Depth != 32){throw new ArgumentException("Only 8, 24 and 32 bpp images are supported.");}// Lock bitmap and return bitmap databitmapData = source.LockBits(rect, ImageLockMode.ReadWrite,source.PixelFormat);//得到首地址unsafe{Iptr = bitmapData.Scan0;//二维图像循环}}catch (Exception ex){throw ex;}}public void UnlockBits(){try{source.UnlockBits(bitmapData);}catch (Exception ex){throw ex;}}public Color GetPixel(int x, int y){unsafe{byte* ptr = (byte*)Iptr;ptr = ptr + bitmapData.Stride * y;ptr += Depth * x / 8;Color c = Color.Empty;if (Depth == 32){int a = ptr[3];int r = ptr[2];int g = ptr[1];int b = ptr[0];c = Color.FromArgb(a, r, g, b);}else if (Depth == 24){int r = ptr[2];int g = ptr[1];int b = ptr[0];c = Color.FromArgb(r, g, b);}else if (Depth == 8){int r = ptr[0];c = Color.FromArgb(r, r, r);}return c;}}public void SetPixel(int x, int y, Color c){unsafe{byte* ptr = (byte*)Iptr;ptr = ptr + bitmapData.Stride * y;ptr += Depth * x / 8;if (Depth == 32){ptr[3] = c.A;ptr[2] = c.R;ptr[1] = c.G;ptr[0] = c.B;}else if (Depth == 24){ptr[2] = c.R;ptr[1] = c.G;ptr[0] = c.B;}else if (Depth == 8){ptr[2] = c.R;ptr[1] = c.G;ptr[0] = c.B;}}}}
}
C#获取指定坐标点像素,效率更高快相关推荐
- PHP抓取网页指定内容(推荐用CURL效率更高)
PHP抓取某页面指定内容 初学php研究了好几个小时最后问了同事,得以解决:下面我就以我网站的一个详情页为例子,给大家分享一下: 直接贴代码,注释写的很清楚了 [方法一] <?php //添加编 ...
- .NET快速信息化系统开发框架 V3.2-amp;gt;WinForm版本新增新的角色授权管理界面效率更高、更规范...
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chinahuyong/article/details/76735793 角色授权管理模块主要是对角色 ...
- for循环和while循环哪个效率更高
for循环和while循环哪个效率更高? 有人说while循环效率更高,有人说for循环的效率更高,今天我们就用事实分析一下哪个效率高? 实践如下,我们来写一个1亿的次的循环,在执行for和while ...
- 取代 Mybatis Generator,这款代码生成神器配置更简单,开发效率更高
作为一名 Java 后端开发,日常工作中免不了要生成数据库表对应的持久化对象 PO,操作数据库的接口 DAO,以及 CRUD 的 XML,也就是 mapper. Mybatis Generator 是 ...
- 工作效率 工具_我使用的工具加快了我的工作流程,使我的工作效率更高
工作效率 工具 by Egwuenu Gift 通过Egwuenu礼物 我使用的工具加快了我的工作流程,使我的工作效率更高 (The tools I use speed up my workflow ...
- SQL优化——IN和EXISTS谁的效率更高
.点击上方"蓝字" 关注我们,享更多干货! IN和EXISTS被频繁使用在SQL中,虽然作用是一样的,但是在使用效率谁更高这点上众说纷纭.下面我们就通过一组测试来看,在不同场景下, ...
- ++i和i++哪个效率更高
参考博文:https://blog.csdn.net/qq_38570571/article/details/81255717 这篇写的不错 在C++当中 ++i比i++效率更高
- 锤子手机Android auto,分享锤子手机Smartisan OS的几个使用小技巧,效率更高
原标题:分享锤子手机Smartisan OS的几个使用小技巧,效率更高 老罗创办的锤子科技一直以来都追求着效率的提升和不随流俗的设计美感,锤子手机基于安卓深度定制的系统Smartisan OS正是体现 ...
- 一文带你彻底搞懂i++和++i的区别,谁的效率更高?
作者简介:Codebowl靓仔,学妹的工具人,C++开发误入数据开发,梦想30岁退休的靓仔就是我啦. i++和++i对于初学者来说,一直是一个特别容易搞混的内容,相信很多人现在也没有完全搞清(作者初学 ...
最新文章
- [unreal4入门系列之五] 熟悉关卡编辑器界面
- bat 批处理获取时间语法格式
- React开发(252):react项目理解 ant design spining加载中
- 如何使用Python脚本
- 中邮智递通过数加和datav将系统和服务迁移到大数据平台
- 正态分布下含绝对值的期望求解 -- 待验证
- Linux连接redis客户端出现Could not connect to Redis at 127.0.0.1:6379: Connection refused
- VS2015编译的OpenJDK8,会崩溃
- 在别人的空间里看到的收藏在这里
- Android Logcat输出为何能自动换行输出的原因以及多\n的作用
- 为什么更多APP开发者选择穿山甲作为游戏变现平台?
- 什么是firmware?
- 【基于HTML技术的趣味“2048”小游戏】(效果+源代码)
- RK系列(RK3568) 收音机tef6686芯片驱动,i2c驱动
- 量子点太阳能电池《一》
- mapbox-gl开发:带高度的标签
- 解决IntelliJ IDEA duplicate class R.java and BuildConfig.java
- C++面向对象程序设计教程
- speedoffice表格中如何自动求和
- Java Math类静态double ceil(double d)与示例