TBitmap在线程中绘制有有关问题
TBitmap在线程中绘制有问题?
我在线程中对TBitmap进行绘制时,发现有微小的机率绘制出现问题,出现问题的bitmap绘制结果是白色的。绘制方法是Canvas.Draw, 我又试了Bitblt(bmp.Canvas.Handle...)这种方式,同样也有问题。
但在主线程中不会出现这种情况。
还有TBitmap.Canvas.Pixels方法,在线程中也有问题,这个机率较大些,具体过程如下:
1. 在线程中创建一TBitmap,加载一个PixelFormat = pf1bit的位图(也就是通常黑白两色的mask)
2. 循环用TBitmap.Canvas.Pixels取出各点的颜色值,你会发现,取出的值有可能不等于clBlack,也不等于clWhite
为什么在线程中会出现这样的情况? 又该如避免?
------解决方案--------------------
TBitmap.Canvas.BeginUpdate;
xxx
TBitmap.Canvas.EndUpdate;
锁一下先。
------解决方案--------------------
我在线程中对TBitmap进行绘制时,发现有微小的机率绘制出现问题,出现问题的bitmap绘制结果是白色的。绘制方法是Canvas.Draw, 我又试了Bitblt(bmp.Canvas.Handle...)这种方式,同样也有问题。
但在主线程中不会出现这种情况。
还有TBitmap.Canvas.Pixels方法,在线程中也有问题,这个机率较大些,具体过程如下:
1. 在线程中创建一TBitmap,加载一个PixelFormat = pf1bit的位图(也就是通常黑白两色的mask)
2. 循环用TBitmap.Canvas.Pixels取出各点的颜色值,你会发现,取出的值有可能不等于clBlack,也不等于clWhite
为什么在线程中会出现这样的情况? 又该如避免?
------解决方案--------------------
TBitmap.Canvas.BeginUpdate;
xxx
TBitmap.Canvas.EndUpdate;
锁一下先。
------解决方案--------------------
- Delphi(Pascal) code
uses SyncObjs; var :TCriticalSection; UserListCs.Acquire; //在这里写上绘图代码试试 UserListCs.Release;