Главная страница
    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.018 c
15-1242737676
Игорь
2009-05-19 16:54
2009.07.26
Протестируйте программу пожалуйста


15-1242822099
easy
2009-05-20 16:21
2009.07.26
Переезд PDA-шлюза dmgate


15-1243075717
12
2009-05-23 14:48
2009.07.26
Делаю контрольную сестре, помогите с теорией..


2-1243667222
Иван
2009-05-30 11:07
2009.07.26
Многострочный текст в константах


2-1243865732
Black
2009-06-01 18:15
2009.07.26
"Подсветка даты" в TMonthCalendar А здесь смотрели?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский