Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.52 MB
Время: 0.025 c
1-1080582955
Ravilr
2004-03-29 21:55
2004.04.18
Не делится, а ругается....почему??


7-1076701580
Khabibulin
2004-02-13 22:46
2004.04.18
Спящий режим


14-1080328720
xman
2004-03-26 22:18
2004.04.18
ASM


1-1080546440
TransparentGhost
2004-03-29 11:47
2004.04.18
Не запоминается Property.


8-1072824417
7roy
2003-12-31 01:46
2004.04.18
Не рисует на canvas