更改图像位图或在图像上绘制位图会导致图像消失

时间:2012-08-21 11:26:35

标签: c++ image bitmap c++builder

我正在使用两个位图来绘制图形。绘图后,我需要在两个图像中显示位图图片。将位图分配给Image或将位图绘制到Image有时会导致Image消失(您可以看到窗体背景)。 我试过这个:

   Image->Picture->Bitmap->Assign(bitmap1);
   Image2->Picture->Bitmap->Assign(bitmap2);


   Image->Picture->Graphic = bitmap1;....


   Image->Canvas->Draw(0,0,bitmap1);....


   Image->Picture->Bitmap->Canvas->Draw(0,0,bitmap1);

如果我在Image和Image2重绘之间没有Sleep(100),则Image2在大多数时间内不可见。另外,添加Image2-> Refresh会有所帮助,但有时两个图像都会出现问题。

如果我将创建的位图或图像保存到.jpeg文件,则所有.jpeg图像都是正确的,并且它们都不是空的。此外,Image-> height,Image-> picture-> bitmap-> height和width始终是正确的。

谁能告诉我,我做错了什么?

1 个答案:

答案 0 :(得分:1)

过了一会儿,我意识到,我保存的位图和图像都不正确。如果我无法看到图片,那就没有完全画出来。没有错误,它是随机发生的,但我发现,一旦程序开始忽略我的绘图命令,它就不会绘制任何东西,直到函数结束,它绘制。 所以 - 为了检查,如果我仍然可以绘制,在将位图分配给Image之前,我这样做了:

            Image3->Canvas->Pixels[y][0] = clRed;
            TColor test =  Image3->Canvas->Pixels[y][0];

            Image3->Canvas->TextOut(y, 0, Device1->name);

            TColor test2 = Image3->Canvas->Pixels[y][0];

            if(test == test2)
            {
                    imageUpdated = false;
                    delete Image3;
                    return;
            }

            Image->Picture->Graphic = Image3;
            imageUpdated = true;

这意味着 - 我将一个像素更改为红色,然后将其打印在文本上,这样可以使像素变为白色。基于我检查的,如果颜色改变了(能够改变像素颜色和打印​​文本)。

我真的不知道理由,为什么它有时会开始忽略绘图命令,但我希望,如果有人遇到与我相同的问题,这个答案可能会帮助他/她。