Форум: "Начинающим";
Текущий архив: 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