Форум: "Начинающим";
Текущий архив: 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