异形图像,内存移位错乱
出现了一个很奇怪的BUG ,在异形大小下图像在从 Mat 转换到 WriteableBitmap的时候,会出现图像错乱的问题。
上次遇到这个问题,还是两年前,记得有一次开会的时候,不知道谁提出了,前端图像分辨率跟随缩放的想法,后面实现的时候,就出现了图像在某些情况下显示异常。
当时也没有解决这个问题,绕道解决图像分辨率缩放只允许特定的几种,规避掉了特殊的情况。最后来这个方案也被毙掉了,就没有了。
我把这个情况以及相关实现代码发送给ChatGPT, GPT 提出可能是图像指针在移动的时候,OpenCV Mat 的图像内存布局和WriteableBitmap 的内存布局不同,于是将内存移动过去之后,出现了图像错乱的情况。要将两边的Stride统一,然后给了一段参考代码。
与此同时,我研究了OpenCVSharp的相关代码,发现和ChatGPT给的类似,不同的是,它包含的情况更多,因为有些情况下,Mat可能是另一个图像Mat指针的一部分,也就是可能不是连续的,针对每一个情况都做了处理。
我遇到的问题其实就是异形分辨率的情况下,步长不再是默认值,于是两边出现了不同步,而我并不没有处理这个变量。
Copy过去之后,BUG解决。