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

Вниз

Сохранить содержимое PaintBox в файл   Найти похожие ветки 

 
alexdn ©   (2014-03-15 22:56) [0]

Вот пытаюсь сохранить содержимое PaintBox в файл. Сделал временную канву, только не знаю как её объединить с канвой PaintBox. Или можно как то сохранить канву PaintBox в файл напрямую?
procedure TForm4.N8Click(Sender: TObject);
var name:string;
TempBitmap:TBitmap;
begin
if SavePictureDialog1.Execute then
begin
name:=SavePictureDialog1.FileName+".jpg";
TempBitmap := TBitmap.Create;
   TempBitmap.width := PaintBox1.Width;
   TempBitmap.height := PaintBox1.Height;
try
//TempBitmap.Canvas.Draw(0, 0, PaintBox1.Canvas);
TempBitmap.SaveToFile(name);
finally
 TempBitmap.Free;
end;
end;
end;


 
Sapersky   (2014-03-15 23:44) [1]

BitBlt можно использовать, в качестве DC будут PaintBox1.Canvas.Handle и TempBitmap.Canvas.Handle. Но это фактически копирование с экрана (по крайней мере в WinXP), и соот-но не сработает если окно частично перекрыто, за границей экрана и т.п.
Вообще я же предлагал тебе рисовать всё сначала в буфер (битмап), а потом выводить битмап на канву - в порядке борьбы с мерцанием, но и сохранение тогда сделать легко.


 
alexdn ©   (2014-03-15 23:46) [2]

Да, согласен BitBlt не сработает, т.к. окно частично перекрыто, всего PaintBox не видно..


 
Юрий Зотов ©   (2014-03-15 23:46) [3]

Пример от DimaBr:

procedure TForm1.Button1Click(Sender: TObject);
begin
 PaintBox1.Canvas.Ellipse(0,0,100,100);
 with TBitMap.Create do begin
   width := PaintBox1.Width;
   height := PaintBox1.Height;
   bitblt(canvas.Handle,0,0,width,height,PaintBox1.Canvas.Handle,0,0,srcCopy);
   SaveToFile("c:\test.bmp");
 end;
end;


 
alexdn ©   (2014-03-15 23:55) [4]

Я уже видел этот код, bitblt скопирует только то, что видно на экране. Вот такая фигня получается - http://s005.radikal.ru/i209/1403/aa/a954b2c3c3d2.png


 
alexdn ©   (2014-03-15 23:56) [5]

Синяя полосочка снизу, это нижняя часть формы.


 
clickmaker ©   (2014-03-16 00:00) [6]

странный вопрос от человека, который собирался покорять зарубежный рынок...


 
alexdn ©   (2014-03-16 00:05) [7]

clickmaker ©   (16.03.14 00:00) [6]
есть проблема и её нужно как то решать, хотя я насколько уже понимаю она скорее всего нерешаема. PaintBox штука мерзкая и упрямая..


 
Sapersky   (2014-03-16 00:08) [8]

Можно при сохранении просто заново перерисовать картинку в битмап. Вынести всё рисование в отдельную функцию и передавать туда Canvas от PaintBox или от TBitmap.


 
alexdn ©   (2014-03-16 00:15) [9]

> Sapersky   (15.03.14 23:44) [1]
> (битмап), а потом выводить битмап на канву - в порядке борьбы
> с мерцанием, но и сохранение тогда сделать легко.
Хорошо, сделал я так, Но ведь временная канва рисуется в onPaint и потом она высвобождается Display.Free; т.е. вызвать её же для сохранения уже не получится. Её что, не высвобождать что ли?


 
Sapersky   (2014-03-16 00:44) [10]

Ну да, создавать в OnCreate, уничтожать в OnDestroy, менять размер в OnResize.


 
clickmaker ©   (2014-03-16 00:54) [11]

> [7] alexdn ©   (16.03.14 00:05)

да-да. А мужики-то, создатели 100500 графических редакторов, и не знают, что она нерешаема )


 
alexdn ©   (2014-03-16 01:04) [12]

> Sapersky   (16.03.14 00:44) [10]
Ну вот, кажется получилось - http://i036.radikal.ru/1403/4c/555db38ba1c3.png


 
alexdn ©   (2014-03-16 15:27) [13]

> Sapersky   (16.03.14 00:44) [10]
> Ну да, создавать в OnCreate, уничтожать в OnDestroy, менять
> размер в OnResize.
Блин, небольшая незадачка, если вынести создание и освободение битмапа из onPaint в OnCreate/OnDestroy формы то выпадает ошибка, вплоть до ацесс виолатион.. и не пойму почему.


 
alexdn ©   (2014-03-16 20:16) [14]

Всё, кажется обошёлся try except-ами..


 
изыди   (2014-03-18 14:10) [15]

>Блин, небольшая незадачка, если вынести создание и освободение битмапа из onPaint в OnCreate/OnDestroy формы то выпадает ошибка,

А ты чего создаешь/удаляешь битмап самого паинтбокса? Какой ужос! Как же там у тебя вообще все это работает.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.052 c
2-1394909781
alexdn
2014-03-15 22:56
2015.09.10
Сохранить содержимое PaintBox в файл


4-1272625269
Fred
2010-04-30 15:01
2015.09.10
Имя ярлыка


15-1422271890
alexdn
2015-01-26 14:31
2015.09.10
Требуется модератор


3-1304102314
Tirael
2011-04-29 22:38
2015.09.10
как можно "залочить" записи?


15-1413052531
wl
2014-10-11 22:35
2015.09.10
Опасное электричество





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