Графический редактор
чаго-нибудь нарисовать на Canvas, картинка начинает жутко мигать. Как это исправить?
Рисуйте на виртуальном Bitmap а потом присваивайте его Image.Picture.Bitmap. Тогда мигать будет только один раз - при присваивании.
On 2001-10-13 19:47, x77 wrote:
Рисуйте на виртуальном Bitmap а потом присваивайте его Image.Picture.Bitmap. Тогда мигать будет только один раз - при присваивании.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Bitmap это объект. Просто так выполнять операции присваивания с объектами нельзя, это приводит к потере памяти. Есть специальный метод для этого, если не ошибаюсь он называется Assign.
Bitmap это объект. Просто так выполнять операции присваивания с объектами нельзя, это приводит к потере памяти. Есть специальный метод для этого, если не ошибаюсь он называется Assign.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Assign, в переводе с англ., и означает присваивание.
On 2001-10-14 13:32, x77 wrote:
<TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD>Quote:<HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
Bitmap это объект. Просто так выполнять операции присваивания с объектами нельзя, это приводит к потере памяти. Есть специальный метод для этого, если не ошибаюсь он называется Assign.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Assign, в переводе с англ., и означает присваивание.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Метод Assign все необходимые дйствия по освобождению памяти, которую занимал предыдущий экземпляр и т.д.
Короче, этот метод выполнит не только присваивание, но и др. необходимые действия.
Метод Assign все необходимые дйствия по освобождению памяти, которую занимал предыдущий экземпляр и т.д.
Короче, этот метод выполнит не только присваивание, но и др. необходимые действия.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
Метод Assign не высвобождает память, а вызывает inherited Assign объекта. Разница между a1 := a2 и a1.Assign (a2) в том, что в первом случае вы получаете просто ссылку на a2 (reference), а во втором копируете в a1 само содержание объекта a2, его content, включающий все его свойства.
В данном конкретном случае разницы между Image1.Picture.Bitmap := Bmp и Image.Picture.Bitmap.Assign (Bmp) не будет никакой, т.к. свойство Bitmap объявлено как
property Bitmap: TBitmap read GetBitmap write SetBitmap;
и при присваивании Bitmap (Image1.Picture.Bitmap := Bmp) вызывается метод записи SetBitmap, тот вызывает метод TPicture.SetGraphic, а уж он, есс-но, само присваивание, как таковое, выполняет через Assign.
Если вы не против, то давайте закончим на этом. К сабжу это всё отношения не имеет.
Ну, вот, Вы сами видите, что все приходит к Assign. И все же рекомендуется использовать Assign, а не просто присваивание.
Тут есть тонкость с TCanvas.ClipRectangle кажется. Если не соответствуют какие-то размеры то начинается это мигание. Если интересно у меня есть исходники двух практически одинаковых компонент(моих) для рисования (потомки ТImage) , но в одном канва мигает, a в другом нет.