Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание emf+ и png файла с помощью GDI+ [D7]


Jimmy ©   (2013-08-28 14:03:00) 

Здравствуйте!
Следующий код рисует черный квадрат на 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+ формате? Заранее спасибо!


icWasya   (2013-08-29 10:28:00) [1]

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


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

Не нужен один универсальный алгоритм для растровой и векторной графики. Нужно два разных. Ну вот я что-то набросал, но вопросы остались. Сами вопросы - внутри кода. Извините за сумбурность.
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;


Jeer   (2013-08-28 18:30:00) [3]

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


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


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

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

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


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

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


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

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


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

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


stas   (2013-08-28 16:28:00) [7]

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


stas   (2013-08-28 16:27:00) [8]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо