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

Вниз

Создание emf+ и png файла с помощью GDI+   Найти похожие ветки 

 
Jimmy   (2013-08-28 14:03) [0]

Здравствуйте!
Следующий код рисует черный квадрат на PaintBox1.
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
R     : TGPRect;
Pen   : TGPPen;
Graph : TGPGraphics;
begin
Graph := TGPGraphics.Create(PaintBox1.Canvas.Handle);
Pen:= TGPPen.Create(MakeColor(255, 0, 0, 0), 1);
R.X := 0;       R.Y := 0;
R.Width := 50;  R.Height := 50;
Graph.DrawRectangle(Pen,R);
Pen.Free;
Graph.Free;
end;

Как мне сохранить этот рисунок в png и emf+ формате? Заранее спасибо!


 
stas ©   (2013-08-28 16:27) [1]

https://www.google.com.ua/search?q=tpngimage+delphi&oq=tpngimage+delphi&aqs=chrome..69i57j0l3.10197j0&sourceid=chrome&ie=UTF-8


 
stas ©   (2013-08-28 16:28) [2]

...с помощью GDI+
Сорри не увидел.


 
умный-преумный   (2013-08-28 16:53) [3]

http://forum.sources.ru/index.php?showtopic=112695


 
Jimmy   (2013-08-28 16:58) [4]

Я, наверное, не лучшим образом сформулировал вопрос, но только начал разбираться с GDI+, не судите строго. В общем, допустим, я умею рисовать на Graph : TGPGraphics. Что это - растровая или векторная графика, наверное, не важно для процесса рисования, также как одинаково рисовать на Canvas и MetaFileCanvas. Вопрос в том, как создать этот Graph и что с ним сделать после прорисовки, чтобы и на экране и в файле получить а) растровый рисунок; б) векторный.


 
умный-преумный   (2013-08-28 17:51) [5]


> растровая или векторная графика, наверное, не важно для
> процесса рисования,

зато важно, чтобы

> на экране и в файле получить а) растровый рисунок; б) векторный.


я вот представляю довольно-таки простой способ растрирования, а вот перевести растр в вектор - сам бы не взялся.

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


 
Jeer ©   (2013-08-28 18:30) [6]

На экране не бывает векторных рисунков.


 
Jimmy   (2013-08-28 19:57) [7]

Не нужен один универсальный алгоритм для растровой и векторной графики. Нужно два разных. Ну вот я что-то набросал, но вопросы остались. Сами вопросы - внутри кода. Извините за сумбурность.
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
Holst1:TBitmap;
Meta  :TGPMetafile;
R     : TGPRect;
Pen   : TGPPen;
Graph : TGPGraphics;
Graph1: TGPGraphics;
Image :TGPImage;
Stat:Status;
Clsid: TGUID;
N:Byte;
//Bitmap:TGPBitmap;
begin
N:=1;
//Растровая графика
if N=1 then
  begin
  Holst1:= TBitmap.Create;
  Holst1.Width :=200;
  Holst1.Height:=200;
  Graph := TGPGraphics.Create(Holst1.Canvas.Handle);
  {Вопрос 1. Правильно я делаю, что указываю Holst1, а не скажем PaintBox1.Canvas.Handle? Ведь может быть необходимость вывести рисунок с другим масштабом на экран}
  Pen:= TGPPen.Create(MakeColor(255, 0, 0, 0), 1);
  R.X := 0;       R.Y := 0;
  R.Width := 50;  R.Height := 50;
  Graph.DrawRectangle(Pen,R);
  PaintBox1.Canvas.Draw(0,0,Holst1);
  Holst1.SaveToFile("111.bmp");
  {Вопрос 2. Можно ли как-то "отправить" Graph в Image без промежуточного "111.bmp"? Будет ли при этом png 32-битным?}
  Image := TGPImage.Create("111.bmp");
  GetEncoderClsid("image/png", Clsid);
  Stat := Image.Save("111.png", Clsid, nil);
  Image.Free;
  Pen.Free;
  Graph.Free;
  Holst1.Free;
  end;
//Векторная графика
if N=2 then
  begin
  {Вопрос 3. А как создать Meta, не связуя его с файлом? А сохранять потом лишь при необходимости.}
  Meta  := TGPMetaFile.Create("111.emf", PaintBox1.Canvas.Handle,MakeRect(0,0,200,200),MetaFileFrameUnitPixel);
  Graph := TGPGraphics.Create(Meta);
  Pen:= TGPPen.Create(MakeColor(255, 0, 0, 0), 1);
  R.X := 0;       R.Y := 0;
  R.Width := 50;  R.Height := 50;
  Graph.DrawRectangle(Pen,R);
  Graph.Free;
  Graph1:= TGPGraphics.Create(PaintBox1.Canvas.Handle);
  Graph1.DrawImage(Meta,0,0);
  Graph1.Free;
  Pen.Free;
  Meta.Free;
  end;
end;


 
icWasya ©   (2013-08-29 10:28) [8]

>>не связуя его с файлом?
Кажется, если в качестве имени метафайла указать nil, то метафайл будет создан в памяти.



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

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

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1386687468
МАКсим007
2013-12-10 18:57
2014.06.29
авторское право


15-1386937387
Никифиров И.В.
2013-12-13 16:23
2014.06.29
Виджеты для смарт-тв Самсунг


2-1377232902
NBAH1990
2013-08-23 08:41
2014.06.29
Проблема с редактированием записи в БД


6-1273138904
nordek
2010-05-06 13:41
2014.06.29
Приложение сервер-клиент, как связать в интеренете.


15-1386937096
Богдан80
2013-12-13 16:18
2014.06.29
Забанили в гугле





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