Текущий архив: 2004.04.18;
Скачать: CL | DM;
ВнизPainBox Найти похожие ветки
← →
freeek (2004-03-31 14:34) [0]Как содержимое PaintBox"а сохранить в файл?
← →
Amoeba © (2004-03-31 14:38) [1]Очень просто. Повторить рисование на Bitmap или на MetafileCanvas и соответствующими процедурами выполнить сохранение в файл.
← →
freeek (2004-03-31 14:40) [2]А если без этого? :)
← →
Ega23 © (2004-03-31 14:41) [3]А никак
← →
freeek (2004-03-31 14:48) [4]делаю так, но почему то файл получается пустой?
procedure TfrmMainForm.N3Click(Sender: TObject);
var BitMap:TBitMap;
begin
Bitmap := TBitmap.Create;
BitMap.Canvas.CopyRect(Rect(0,0,PB.Width,PB.Height),PB.Canvas,Rect(0,0,PB.Width,PB.Height));
BitMap.SaveToFile("1.bmp");
BitMap.Free;
end;
← →
Ega23 © (2004-03-31 14:50) [5]Bitmap.Height:=PB.Height;
Bitmap.Width:=PB.Width;
Помогло?
← →
PVOzerski © (2004-03-31 14:51) [6]Если в .bmp, то используя класс tBitmap, методы tCanvas.CopyRect и tBitmap.SaveToFile.
← →
freeek (2004-03-31 14:54) [7]Не совсем. Файл создался. Но у меня размер PaintBox"a гораздо больше чем, размер экрана. Поэтому на картинке отоборажается кусок PB, а мне нужен он полностью.
← →
Ega23 © (2004-03-31 14:58) [8]Ну тогда W и H по размерам своего канваса выставляй.
← →
PVOzerski © (2004-03-31 15:00) [9]А tImage вместо tPaintBox использовать не пробовал? Или много ресурсов отъедает?
← →
freeek (2004-03-31 15:01) [10]Дело в том, что у меня очень большой PaintBox около 20000x20000 и мне нужно его сохранить полностью. Получается, что то, что не влезает в область экрана отображается, как просто белые поля, а то, что поместилось нормально отображается. Так как мне сохранить полностью содержимое PB в файл? Помогите пожайлуста.
← →
freeek (2004-03-31 15:01) [11]2PVOzerski на нем рисовать нельзя.
← →
Ega23 © (2004-03-31 15:02) [12]tImage больно "вумный". Лично мне если рисовать что-то надо, tPaintBox больше нравится. Фактически это и есть TCanvas
← →
Ega23 © (2004-03-31 15:05) [13]2PVOzerski на нем рисовать нельзя.
Кто это тебе такую пургу сказал?
← →
Amoeba © (2004-03-31 16:07) [14]Если размер PaintBox столь огромный, то иммет все-таки смысл повторить процедуру рисования на MetafileCanvas и сохранить в формате метафайла, а не зморачиваться с растровым форматом.
← →
Тимохов © (2004-03-31 16:09) [15]
> Amoeba © (31.03.04 16:07) [14]
имхо зависит все сильно от характера изображения.
если это по приторе своей растровая графика (например, карта)?
Тогда те же яйца, только вид сбоку - все равно до фига места зинимать будет, что метафайл, что битмэп.
← →
Amoeba © (2004-03-31 16:11) [16]
> Тимохов © (31.03.04 16:09) [15]
Согласен, окончательный выбор формата зависит от характера задачи.
← →
WebError (2004-03-31 16:16) [17]Попробуй вручную ->
битмап файл состоит из 2 заголовков
BitmapFileHeader
BitmapInfoHeader
потом, если формат пикселя < 16 бит на точку, то
PALLETE
а потом DIB растр, причём количество байтов в "строке" растра должно делится на 4, иначе просто дополни 0-байтами.
Взять точки можно с помощью CopyRect и ScanLine[] битмапа в цикле, где надо взять по куску PB на каждом шаге цикла.
Удачи! :))))
← →
freeek (2004-04-01 09:11) [18]Сделал следующим образом:
Bitmap := TBitmap.Create;
Bitmap.Width:=PB.Width;
Bitmap.Height:=PB.Height;
Отрисовал свои объекты еще и на битмапе, а потом просто:
BitMap.SaveToFile(fname)
Вот и все. Правда файл большой получился около 50 мегов, но это уже не столь важно для моей задачи. Всем спасибо за помощь.
← →
Defunct © (2004-04-01 09:34) [19]freeek а ты знаешь что PaintBox за пределами экрана, не только не хранит изображение, он его там даже не рисует.
так что твои 20000x20000 - полный бред
← →
freeek (2004-04-02 09:41) [20]Согласен, однако PAintBox я использовал только для отображения в текущей области экрана.
← →
Locker (2004-04-02 10:58) [21]2 freeek
Очень хорошо, что у тебя получилось. Только в следующий раз забудь о PaintBox"е (странно, зачем его Borland вообще выдумал?). Используй TImage с внутренним TBitmap или TMetaFile. В противном случае при прорисовке теряется нарисованное изображение.
Да вообще странно: создавать Bitmap, PaintBox... потом рисовать и там и там, вместо того, чтобы взять Image, в котором это все уже давно объединено! Ламерство какое-то!...
P.S. Рисунки мелом на асфальте, при некоторых условиях, тоже могут считаться произведением искусства...
← →
Defunct © (2004-04-02 11:22) [22]Locker (02.04.04 10:58) [21]
Ниче подобного, как раз PaintBox отличный компонент, для тех кто не отягощен ленью. На основе PaintBox можно сделать Image, а вот из Image"a PaintBox уже никак не получится.
>Да вообще странно: создавать Bitmap, PaintBox... потом рисовать и там и там, вместо того, чтобы взять Image, в котором это все уже давно объединено! Ламерство какое-то!...
А ты что предлагаешь хранить 20000x20000 постоянно в памяти? Всё верно он делает. Создает битмап тока тогда, когда надо его весь сохранить в файл. А до тех пор работает с маленьким кусочком - видимой областью.
Страницы: 1 вся ветка
Текущий архив: 2004.04.18;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.273 c