为什么这是 OpenCVSharp 中的图像大小
Why is this the image size in OpenCVSharp
BitmapConverter.cs 包含函数
public static unsafe void ToBitmap(this Mat src, Bitmap dst)
稍后(在第 403 行)我们有这个片段:
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
看这张图(来自 darkdragon-001 在 opencv 上的问题 GitHub here)我不明白为什么上面的行让我们得到图像大小?
为了更好地理解这一点,我们需要更多上下文:
// ....
if (sstep == dstep && !submat && continuous)
{
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
MemoryHelper.CopyMemory(pDst, pSrc, imageSize);
}
// ...
好的,这是处理复制包含像素数据的原始内存的代码。
这些语句仅在以下情况下执行:
sstep == dstep
-- 源和目标的步长(内存中两个连续行之间的偏移量)相同
!submat
-- 源图像不是子矩阵(意味着它是完整图像,而不是更大图像的视图,因此 data == datastart
)。
continuous
-- 源矩阵是连续的(行与行之间没有填充)。
总而言之,它仅在底层像素阵列是从 datastart
到 dataend
的一个连续内存块时运行。
因此该表达式计算两个指针 src.Data
和 src.DataEnd
之间的字节数。
BitmapConverter.cs 包含函数
public static unsafe void ToBitmap(this Mat src, Bitmap dst)
稍后(在第 403 行)我们有这个片段:
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
看这张图(来自 darkdragon-001 在 opencv 上的问题 GitHub here)我不明白为什么上面的行让我们得到图像大小?
为了更好地理解这一点,我们需要更多上下文:
// ....
if (sstep == dstep && !submat && continuous)
{
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
MemoryHelper.CopyMemory(pDst, pSrc, imageSize);
}
// ...
好的,这是处理复制包含像素数据的原始内存的代码。
这些语句仅在以下情况下执行:
sstep == dstep
-- 源和目标的步长(内存中两个连续行之间的偏移量)相同!submat
-- 源图像不是子矩阵(意味着它是完整图像,而不是更大图像的视图,因此data == datastart
)。continuous
-- 源矩阵是连续的(行与行之间没有填充)。
总而言之,它仅在底层像素阵列是从 datastart
到 dataend
的一个连续内存块时运行。
因此该表达式计算两个指针 src.Data
和 src.DataEnd
之间的字节数。