【发布时间】:2025-12-19 18:10:12
【问题描述】:
我正在使用 C# 中的位图,如您所知,位图通常以 24bpp 或 32bpp 的形式存储在内存中(锁定时)。提取一个像素的int颜色值后,我需要一次读取一个字节来得到R、G、B并编辑相同的字节来分别修改RGB。有没有办法使用指针来修改 4 字节 32 位 int 的任何给定字节?或者也许我可以创建一个struct 并将 int 转换为允许访问/修改单个字节的结构?
int color = 0xFFAABB
// attempt to read individual bytes of an int
int R = *((*color));
int G = *((*color)+1);
int B = *((*color)+2);
// attempt to modify individual bytes of an int
*((*color)) = R;
*((*color)+1) = G;
*((*color)+2) = B;
我需要这样一种方法来快速读取/写入单个字节。如果有一个unsafe 方法可以使用这些指针,我也不介意。我无法将每个像素转换为 Color 对象,因为它对于高速图像处理来说太慢了。
【问题讨论】:
-
没有得到正确的结果..您是否尝试修改位图每个像素的颜色?
-
为什么不使用 Color.FromArgb()?然后你可以使用 color.R/G/B。
-
@Carra - 你的方法慢得可怜。只需尝试将每个数字颜色值转换为每个像素的 OOP 颜色对象,然后查看图像处理的速度。我需要非常快地处理字节,所以我试图避免使用位移方法。 OOP 是不可能的。
-
@Geotarget。你是对的,它很慢。当我不得不这样做时,我使用了一个名为 FastBitmap 的类,它使用不安全的方法并且速度更快。
标签: c# pointers colors bitmap int