Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Вниз

методы 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
2-1243836317
AntiUser
2009-06-01 10:05
2009.07.26
Чем обусловлено использование событий On... и CallBack функций?


2-1244025649
Trifle
2009-06-03 14:40
2009.07.26
Проблема с dll


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


15-1242565400
TUser
2009-05-17 17:03
2009.07.26
С.Г. Рубин. Устройство нашей Вселенной.


15-1242935407
Эстет
2009-05-21 23:50
2009.07.26
Чему равно 2*2,222





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский