【发布时间】:2021-04-05 14:18:33
【问题描述】:
我正在尝试正确。两个 Bitmap* 对象之间的不同区域。当我通过 2 位图 * 它可以为第一帧运行 lockbits 但它不能为第二个位图执行。
Rect GetRecDifference(Bitmap* currentFrame, Bitmap* previousFrame) {
if (previousFrame == NULL) {
previousFrame = currentFrame;
}
else {
return Rect(0, 0, 0, 0);
}
BitmapData* bd1 = new BitmapData;
Rect rect1(0, 0, currentFrame->GetWidth(), currentFrame->GetHeight());
currentFrame->LockBits(&rect1, ImageLockModeRead, PixelFormat32bppARGB, bd1);
BitmapData* bd2 = new BitmapData;
Rect rect2(0, 0, previousFrame->GetWidth(), previousFrame->GetHeight());
previousFrame->LockBits(&rect2, ImageLockModeRead, PixelFormat32bppARGB, bd2);
它可以运行第一个(bd1 *)加载状态正常,最后一个结果显示正常。但是当涉及到 bd2 时,它显示状态为 WrongState(8)。
这是因为我将当前指针复制到前一个指针吗?错误状态错误的原因是什么?我需要从内存中清除某些部分吗?
【问题讨论】:
-
为什么有两个指针指向同一个位图?你为什么要锁定同一个位图两次?我想这就是它不起作用的原因。
-
您好,我想让当前位图对照前一个位图检查它,完成后我将当前位图保存为前一个位图。嗯,你可能是对的。我会很快检查的。将当前帧复制到前一帧部分怎么样?我的意思是我该怎么做?只是以前 = 当前足够,或者我应该将图像克隆到以前的变量,因为如您所知,我必须在函数结束时删除当前图像。
-
previous = current使两个指针指向同一个位图。 -
在每次迭代开始时
current = getNewCurrent();然后在每次迭代结束时使用先前和当前进行处理delete previous; previous = current; -
最后,一旦整个迭代完成,您仍然会留下一张以前的图像,所以最后一张
delete previous;。