السلام عليكم
ما هي الالية التي يتم تحويل بها من png الى svg code وهل يمكن عمل ذلك بالدلفي كمثال هذا code svg
M0 180 l0 -180 180 0 180 0 0 180 0 180 -180 0 -180 0 0 -180z
لصورة حرف ع
وعليكم السلام
ٍ
SVGLite
أو
DelphiSVG
_________________________
باستعمال
DelphiSVG:
في المجلد vcl- المثال SvgViewer
أضفت Button وكود الخاص بها (بعد اختيار رسمة معينة من القائمة الجانبية للبرنامج المثال):
كود :
// uses Vcl.Imaging.pngimage
procedure TForm1.Button2Click(Sender: TObject);
var
Bitmap: TBitmap;
PNG: TPngImage;
begin
Bitmap := TBitmap.Create;
try
with Bitmap do
begin
PixelFormat := pf32bit;
Transparent := True;
Width := trunc(FSVG.Width);
Height := trunc(FSVG.Height);
end;
FSVG.PaintTo(Bitmap.Canvas.Handle, MakeRect(0.0, 0.0, FSVG.Width,
FSVG.Height), nil, 0);
try
PNG := TPngImage.Create;
PNG.Assign(Bitmap);
PNG.SaveToFile('MYFILE.PNG');
finally
PNG.Free;
end;
finally
Bitmap.Free;
end;
end;
بارك الله فيك اخي مروان لكن حسب الكود قهو يحول من svg الى png وانا اريد العكس لو ممكن الطريقة يدويا مثلا يباستخدام الهيكس او ما شابه ان امكن
لقد اتبعت عنوان سؤالك !!
المهم، تستطيع القيام بالمهمة باستعمال برامج خارجية عبر استدعائها من خلال الدلفي.
1- تحويل الصورة من PNG إلى PNM (عبر البرنامج ImageMagick الذي يوفر أداة التحويل)
2- تحويل PNM إلى SVG (عبر الأداة potrace - اجعل الملف potrace.exe في نفس مجلد برنامجك أو استدعيه من مساره، في المثال أدناه هو في نفس المجلد للبرنامج)
3- حذف الملف الوسيط PNM.
بعد تثبيت البرنامج ImageMagick وتفعيل الخاصية إدراج مسار البرنامج في PATH (عند التثيبت)،
الآن نستدعي الأداتان عبر الدلفي (المثال بسيط للإجابة فقط):
كود :
procedure TForm1.Button1Click(Sender: TObject);
var
sourceFile, destFile, FilePath: string;
txt: PWideChar;
begin
if OpenDialog1.Execute then
begin
sourceFile := OpenDialog1.FileName;
destFile := ChangeFileExt(sourceFile, '.PNM');
txt := PWideChar('/C magick convert ' + sourceFile + ' ' + destFile);
ShellExecute(0, nil, 'cmd.exe', txt, nil, SW_HIDE);
repeat
FilePath := FileSearch(destFile, '.')
until FilePath<>'';
txt := PWideChar('/C potrace ' + destFile + ' -s');
ShellExecute(0, nil, 'cmd.exe', txt, nil, SW_HIDE);
txt := PWideChar('/C rm ' + destFile );
ShellExecute(0, nil, 'cmd.exe', txt, nil, SW_HIDE);
end;
end;
__________
ImageMagick
https://www.imagemagick.org/script/download.php#windows
potrace
https://github.com/skyrpex/potrace
وعليكم السلام ورحمة الله وبركاته
يمكنك استخدام potrace فقط حول png الى bmp ثم افتح cmd
potrace.exe -s 1.bmp -o 2.svg