Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.06.29;
Скачать: CL | DM;

Вниз

Создание 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;
Скачать: CL | DM;

Наверх




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


2-1374476877
Жора с Бора
2013-07-22 11:07
2014.06.29
Указатели


2-1377774807
delphi.coder
2013-08-29 15:13
2014.06.29
работа с объктом TFieldDataLink


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


15-1386869684
alex2013
2013-12-12 21:34
2014.06.29
ищем опытного программиста...