public static unsafe void ToBitmap(this Mat src, Bitmap dst)
稍后(第403行)我们有这个片段:
uint imageSize = (uint)(src.DataEnd.ToInt64() - src.Data.ToInt64());
查看此图表(来自opencv GitHub here上的darkdragon-001问题)我无法理解为什么上面的行会为我们提供图像大小?
答案 0 :(得分:1)
为了更好地理解这一点,我们需要更多背景信息:
// ....
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
之间的字节数。