如何在 C# 中处理 ImgData
本文关键字:处理 ImgData | 更新日期: 2023-09-27 17:56:04
我正在尝试按照此处发布的过滤器实现一个 retinex 过滤器。一开始他定义:
#define pc(image, x, y, c) image->imageData[(image->widthStep * y) + (image->nChannels * x) + c]
在进行高斯卷积时,他将其用作:
v1 += kernel[k] * (unsigned char)pc(temp, i, source, 0);
后来:
pc(img, i, j, 0) = (char)int2smallint(v1);
我无法将其转换为 C#,也不了解他在做什么。C# 中没有无符号字符,而且他访问图像数据的方式也完全不同。那么,在 C# 中实现它的最佳方法是什么?
C# 中没有无符号字符
字节。C/C++ 中的 char 是 C# 中的字节,C# 中有字节;)
此外,他访问图像数据的方式也完全不同。
几乎不。ImageData是某种类型的位图,他通过数组语法做简单的位图。这在 C# 中也是可行的 - 获取位图或他使用的任何临时形式并将其放入字节数组中。现在不明白他做了什么,这是一个失败的事业。我也不确定我是否将其炸成 DirectX 表面并为此编写过滤器;
好的,
我解决了。这:
v1 += kernel[k] * (unsigned char)pc(temp, i, source, 0);
翻译成:
IntPtr ptr = img.ImageData;
v1 += kernel[k] * Marshal.ReadByte(ptr, (i * img.WidthStep) + (source * img.NChannels) + 0);
元帅是答案:)