Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.26;
Скачать: CL | DM;

Вниз

методы Assign и Canvas.Drawобъекта TBitmap   Найти похожие ветки 

 
night_light ©   (2009-05-28 16:22) [0]

Здравствуйте! Подскажите пожалуйста, что происходит при использовании метода Assign и метода Canvas.Draw.
При использовании в VCL код:
InBitmap, NewBitmap: TBitmap;
...
InBitmap.LoadFromFile("1.bmp");
...
NewBitmap.Canvas.Draw(3, 5, InBitmap);
выдаёт белое поле в NewBitmap,
тогда как код:
InBitmap, NewBitmap: TBitmap;
...
InBitmap.LoadFromFile("1.bmp");
...
NewBitmap.Assign(InBitmap);
NewBitmap.Canvas.Draw(3, 5, NewBitmap);
как и требуется помещает в NewBitmap
сдвинутую картинку из InBitmap.
Если же код для такого сдвига использовать в другом потоке (Thread),
то во втором случае вылетает исключение EOutOfResources с сообщением "Недостаточно памяти для обработки команды.", а в первом случае всё работает так, как мне нужно.
По документации разобраться не смог. Хотелось бы понять суть происходящего, чтобы избежать возможных неожиданных редко возникающих ошибок.


 
Ega23 ©   (2009-05-28 16:24) [1]

Размеры задал?


 
night_light ©   (2009-05-28 16:37) [2]

прощу прощения, но в тех примерах, на основании которых я писал код про задание размеров Bitmap-а ничего не сказано, поясните, пожалуйста, как и где их лучше задавать?


 
night_light ©   (2009-05-28 16:42) [3]

Как я понял, метод Assign в данном случае представляет что-то вроде присвоения указателя и копирования при изменении, и поэтому возникают проблеммы, подскажите, пожалуйста, какой функцией я могу СКОПИРОВАТЬ один битмап в другой немедленно, т.е. при вызове функции.


 
Ega23 ©   (2009-05-28 16:46) [4]


> Как я понял, метод Assign в данном случае представляет


неправильно понял.


> какой функцией я могу СКОПИРОВАТЬ один битмап в другой



procedure TCatViewFrame.dbgCatDetailsDBTableView1Column1CustomDrawCell(
 Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
 AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
 bmp : TBitmap;
begin
 if not adsCatDetails.Active then Exit;
 if adsCatDetails.IsEmpty then Exit;

 bmp := TBitmap.Create;
 try
   try
    ilItemsImages.GetBitmap(AViewInfo.Value, bmp);
     ACanvas.Canvas.CopyRect(AViewInfo.Bounds, bmp.Canvas, Rect(0,0,16,16));
     ADone := True;
   except
   end;
 finally
   bmp.Free;
 end;
 

end;


 
night_light ©   (2009-05-28 17:09) [5]

>> Как я понял, метод Assign в данном случае представляет
>неправильно понял.
как же тогда понимать строчку в справке по TBitmap.Assign
If the bitmap needs to be changed, the actual bitmap image is copied before the changes are made (copy on write).


 
night_light ©   (2009-05-28 17:28) [6]

разобрался, спасибо!



Страницы: 1 вся ветка

Текущий архив: 2009.07.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
2-1243397495
Алексей Иванов
2009-05-27 08:11
2009.07.26
Свойство TTreeView.Parent


2-1244024577
Maxim
2009-06-03 14:22
2009.07.26
Отключение клавиши tab в программе


11-1203566557
Jon
2008-02-21 07:02
2009.07.26
Error with CxKOLTiffJpg


3-1224859229
gameus
2008-10-24 18:40
2009.07.26
выгрузить xml из хранимки в файл


2-1243942754
i2e
2009-06-02 15:39
2009.07.26
колесо мыши