Главная страница
    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.046 c
15-1416917657
AndrewAndrey
2014-11-25 15:14
2015.09.10
Размер шрифта при печати


15-1417298499
Pavia
2014-11-30 01:01
2015.09.10
Родить объект


15-1415898451
полвторого
2014-11-13 20:07
2015.09.10
Ega23, а я песню Вам нашёл!


15-1415447176
dmk
2014-11-08 14:46
2015.09.10
Про переменные


2-1392705521
Ildarm
2014-02-18 10:38
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский