Цитата:
но, м.б. как-то можно все-таки избежать этого бага? =(
|

Можно, главное найти причину, почему оно то отрисовывается а то нет.
Итак, по порядку. Дело в том что TImage и TBitmap изначально не ThreadSafe классы и борланд в хелпах говорит что в многопоточной среде возможны баги. Но не стоит отчаиваться, в Канвасе есть специально приготовленные для нас методы Canvas.Lock и Canvas.Unlock (кажется Lock создает семафор, я особо не вдавался в подробности). Так вот, вызывая Lock мы блокируем доступ к канвасу из других thread'ов, а в конце, когда сделали все что хотели, вызываем unlock.
Конкретно по файлу, который выложил Decoding. Внутри TSepiaThread.Execute в самом начале пишем Form1.Image2.Canvas.Lock;
а в конце execut'а Form1.Image2.Canvas.Unlock; Да, еще убираем Synchronize( UpdateBmp ); внутри BmpToSepia, вместо него пишем просто UpdateBmp, иначе получим "DeadLock".
вот, все бы казалось работает, я запустил, отрисовывает, но на попытке 10й я снова увидел "белый" битмап. Баг опять повторялся, хотя теперь очень редко.
Тогда я еще вызвал Bmp.Canvas.Lock; и Bmp.Canvas.unLock; внутри метода BmpToSepia. Вот теперь все работает точно.
p.s. Больше бага не замечал, но кто знает, проверьте у себя.
уфф, чтото я много написал %)