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
这不是唯一的方法,但希望你明白了。
我正在努力纠正。两个 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
这不是唯一的方法,但希望你明白了。