【发布时间】:2019-03-15 15:13:11
【问题描述】:
原始场景
我严重误解了自己的代码,这种情况是无效的。
这与我的正常驾驶室不同,所以我会解释得最好 我能。
我有一个用户设置的颜色代码。示例:
int R = 255; int G = 255; int B = 255;我有很多大图像需要检查颜色 某些坐标集上的像素与用户设置的颜色相对。一世 可以成功获取图片中任意像素的
byte*,并获取 我期望的值。我使用来自
Bitmap.LockBits(...)的BitmapData执行此操作。我的 理解是锁定对性能很重要 原因。会有很多这样的例子被使用 跨越非常大的图像集合,因此性能是主要的 考虑。出于同样的性能原因,我试图避免将 检索由不安全字节表示为整数的像素颜色 - 我会 而是一次将我的 int 转换为一个字节并将其用于 可能会在每次运行时针对数百万像素运行 调用。
但是...我无法弄清楚如何获取任何用户设置的整数 进入一个不安全字节(
byte*)并将其与不安全字节进行比较 从像素中检索。
不安全字节 (byte*) 是像素数据的 8 位指针(至少,我是这么理解的),但我将单个颜色作为常规旧字节获取。
byte* pixel = //value here pulled from image;
pixel[2] //red value byte
pixel[1] //green value byte
pixel[0] //blue value byte
所以我不需要将我的ints 转换为不安全字节...指针?...,只需一个简单的Converter.ToByte(myInt)。
真正的问题
但是由于我认为这仍然可能是我的场景之外的一个有效问题,所以我将把这部分留给别人来回答,希望将来能帮助别人:
如何在 C# 中获取任何给定的 int 并将其与“不安全字节”指针“byte*”进行比较?
【问题讨论】:
-
顺便说一句,没有不安全的字节,
byte*是一个指向(正常)字节的指针,不安全的东西(在它需要unsafe关键字的意义上)正在使用指针 -
您可以从位图中获取颜色。颜色 color = bitmap.GetPixel(x, y); Int32 rgb = color.ToArgb();
-
@harold 我开始认为我根本不明白我在这里要做什么......主要不是 C# 开发人员,所以这对我来说是不同的。
-
@jdweng 是的,但出于性能原因,我认为我应该避免使用
GetPixel,至少这是我读过的文档让我相信的。 -
如果您锁定 ARGB 格式,您甚至可以使用
int*并同时比较整个像素,而不是分别处理 R G 和 B