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

Вниз

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

Наверх





Память: 0.49 MB
Время: 0.055 c
1-1080646782
Mazer
2004-03-30 15:39
2004.04.18
Автоматически загрузить в Image картинку jpg, gif, bmp... как?


1-1080665760
Jul
2004-03-30 20:56
2004.04.18
Access violation при использовании функции из DLL


1-1080811054
ai
2004-04-01 13:17
2004.04.18
Быстродействие Excel


14-1080316094
Vovchik_A
2004-03-26 18:48
2004.04.18
Я плалкалъ


1-1080635700
V-Isa
2004-03-30 12:35
2004.04.18
Программно подменить содержимое буфера обмена





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