C++ GDIPlus 位图锁位结果 WrongState(8)

C++ GDIPlus Bitmap lockbits results WrongState(8)

我正在努力纠正。两个 Bitmap* 对象之间的不同区域。当我传递 2 个位图*时,它可以 运行 为第一帧锁定位,但不能为第二个位图执行此操作。

 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)。

这是因为我将当前指针复制到前一个吗?错误状态错误的原因是什么?我需要从内存中清除某些部分吗?

问题是您试图锁定同一张图片两次,这

previousFrame = currentFrame;

表示您的两个指针都指向同一张图片。

相反,您需要一种将两张图像同时保存在内存中的方案。类似下面的内容

Bitmap* current = NULL;
Bitmap* previous = NULL;
while (something)
{
    current = getNextImage(); // get the new image
    if (current && previous)
    {
        // process current and previous images
        ...
    }
    delete previous; // delete the previous image, not needed anymore
    previous = current; // save the current image as the previous
}
delete previous; // one image left over, delete it as well

这不是唯一的方法,但希望你明白了。