|
.net /GDI+/création enregistrement d'un fichier EMF |
Iniciado por vcopovi, jul., 19 2005 1:17 PM - 7 respostas |
| |
| | | |
|
| |
Publicado em julho, 19 2005 - 1:17 PM |
Salut,
Je cherche des compétences concernant la création et l'enregistrement d'un fichier EMF(+) (format vectoriel géré par Windows). Ci-dessous la syntaxe MF à convertir en .net/windev9. Un début de commencement de tuyau serait très apprécié... En cadeau, notre vectoriseur gratuit
D'avance merci,
Vic www.siame.com
//---------------------------------------------------- Metafile metafile(L"SampleMetafile.emf", hdc); { Graphics graphics(&metafile); Pen greenPen(Color(255, 0, 255, 0)); SolidBrush solidBrush(Color(255, 0, 0, 255));
// Add a rectangle and an ellipse to the metafile. graphics.DrawRectangle(&greenPen, Rect(50, 10, 25, 75)); graphics.DrawEllipse(&greenPen, Rect(100, 10, 25, 75));
// Add an ellipse (drawn with antialiasing) to the metafile. graphics.SetSmoothingMode(SmoothingModeHighQuality); graphics.DrawEllipse(&greenPen, Rect(150, 10, 25, 75));
// Add some text (drawn with antialiasing) to the metafile. FontFamily fontFamily(L"Arial"); Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);
graphics.SetTextRenderingHint(TextRenderingHintAntiAlias); graphics.RotateTransform(30.0f); graphics.DrawString(L"Smooth Text", 11, &font, PointF(50.0f, 50.0f), &solidBrush); } // End of recording metafile.
// Play back the metafile. Graphics playbackGraphics(hdc); playbackGraphics.DrawImage(&metafile, 200, 100); |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 19 2005 - 2:08 PM |
Si mes souvenirs sont exacts les fonctions de GDI+ sont contenues dans une dll, donc tu peux utiliser, en windev, les fonctions de cette dll grace a la fonction API ou AppelDLL32. Un problème persiste pour les structures de données !!! Personnellement je garderai mes procédures existantes dans mon langage d'origine que je stockerai dans une dll, dans mon progamme windev j'appellerai les fonction de ma dll.
En espérant que ça te soit utile.
B N J |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 19 2005 - 5:18 PM |
L'utilisation de .net est à la fois (théoriquement) plus simple et donne véritablement accès "à tout"
Vic
Voilà mon code complet qui consiste à lire un fichier texte (PostScript), à dessiner avec les fonctions de GDI+ et c'est là qu'il me manque la possibilité d'enregistrer en emf le dessin. Note : Chaque vecteur est composé de ligne(s) droite(s) ou de courbe(s) de bézier d'où l'utilisation de Addbezier et Addline. Les fonctions DrawPath et FillPath permettent donc de dessiner le contour de la forme et/ou de peindre le contenu de la forme //------------------------------------------------------------ o_Metafile est un Metafile("c:\testvic.emf") o_Path est GraphicsPath o_Pen est Pen(Color::FromArgb(Rouge,vert,bleu)) o_SolidBrush est SolidBrush(Color::FromArgb(Rouge,vert,bleu)) o_Graphics = Graphics::FromHwnd(Handle(<fenetre>)) o_Metafile = MetafileType::EmfPlusOnly o_Graphics:Set_SmoothingMode(SmoothingMode::AntiAlias) ...... LigneLue = fLitLigne(IdFichier) TANTQUE LigneLue <> EOT SELON... CAS="m" //démarrage du vecteur o_Path:StartFigure() CAS="c" //traitement de la courbe de bézier o_Path:AddBezier(NewPosX,NewPosY,PosInterX1,PosInterY1,PosInterX2,PosInterY2,PosInterX,PosInterY) CAS="l" //traitement de la ligne o_Path:AddLine(NewPosX,NewPosY,PosInterX,PosInterY) CAS="b" //couleur de zone o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu)) o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu)) FIN //dessin d'une zone o_Graphics:DrawPath(o_Pen,o_Path) o_Graphics:FillPath(o_Pen,o_Path) o_Path:CloseallFigures() o_Path:Reset() FIN LigneLue = fLitLigne(IdFichier) FIN |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 19 2005 - 6:03 PM |
Je sais pas si on se comprend très bien. Déjà est-ce que le code que tu fournis ci-dessous compile ? (ça fait un moment que j'ai pas utilisé les wmf ou emf) Je pense que l'enregistrement est automatique a chaque appel des fonctions de dessin, donc tu n'as pas besoin d'enregistrer. Par contre je pense que tu n'utilise pas le bon constructeur Metafile : il manque le hdc (comme dans ton premier message). Le constructeur que tu utilise là est juste pour la lecture et non pour l'enregistrement. De meme pour le constructeur Graphics je pense qu'il te faut utiliser le constructeur qui a la signature suivante : Graphics::Graphics(Image *); en paramètre tu peux passer ta variable metafile Par la suite je pense que chaque méthode de graphics ecrira automatiquement dans le fichier emf. Voilà mon avis, tiens moi au courant. Bonne chance B N J
"vic" <vcopovi@wanadoo.fr> a écrit dans le message de news:42dcf2bf$1@news.pcsoft.fr...
L'utilisation de .net est à la fois (théoriquement) plus simple et donne
véritablement accès "à tout"
Vic
Voilà mon code complet qui consiste à lire un fichier texte (PostScript),
à dessiner avec les fonctions de GDI+ et c'est là qu'il me manque la possibilité d'enregistrer en emf le dessin. > Note : Chaque vecteur est composé de ligne(s) droite(s) ou de courbe(s) de bézier d'où l'utilisation de Addbezier et Addline.
Les fonctions DrawPath et FillPath permettent donc de dessiner le contour de la forme et/ou de peindre le contenu de la forme
//------------------------------------------------------------ o_Metafile est un Metafile("c:\testvic.emf") o_Path est GraphicsPath o_Pen est Pen(Color::FromArgb(Rouge,vert,bleu)) o_SolidBrush est SolidBrush(Color::FromArgb(Rouge,vert,bleu))
o_Graphics = Graphics::FromHwnd(Handle(<fenetre>)) o_Metafile = MetafileType::EmfPlusOnly o_Graphics:Set_SmoothingMode(SmoothingMode::AntiAlias)
...... LigneLue = fLitLigne(IdFichier) TANTQUE LigneLue <> EOT SELON... CAS="m" //démarrage du vecteur o_Path:StartFigure() CAS="c" //traitement de la courbe de bézier
o_Path:AddBezier(NewPosX,NewPosY,PosInterX1,PosInterY1,PosInterX2,PosInterY2 ,PosInterX,PosInterY)
CAS="l" //traitement de la ligne o_Path:AddLine(NewPosX,NewPosY,PosInterX,PosInterY) CAS="b" //couleur de zone o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu)) o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu)) FIN //dessin d'une zone o_Graphics:DrawPath(o_Pen,o_Path) o_Graphics:FillPath(o_Pen,o_Path) o_Path:CloseallFigures() o_Path:Reset() FIN LigneLue = fLitLigne(IdFichier) FIN
|
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 19 2005 - 7:33 PM |
Merci pour tes commentaires. Je crois que tu as raison en ce qui concerne le constructeur metafile (c'est là le problême car je ne fais qu'aborder .net) Toute "ma doc" se réduit à la page suivante http://msdn.microsoft.com/library/default.asp….
Quelle serait alors la définition de ce constructeur ?
Si l'enregistrement est automatique quelle serait la manip pour nommer le fichier ?
Je ne sais pas si tu es allé sur notre site et si tu as téléchargé VectorEye2 (le problême que nous avons c'est que nous voulons nous affranchir du viewer SVG d'Adobe au profit d'un dessin direct avec GDI+), mais si tu me passes la pre-key générée par VE sur ton ordi, je t'enverrai une licence définitive.
Vic Siame |
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 20 2005 - 12:05 PM |
Je pense que le bon constructeur metafile à employer : Metafile( const WCHAR *fileName, HDC referenceHdc, EmfType type, const WCHAR *description );les deux derniers paramètres sont facultatifs.En ce qui concerne le nom du fichier c'est le premier paramètre du constructeur.Tiens voilà quelques liens qur d'autres pages de la msdn :http://msdn.microsoft.com/library/default.asp… Plus/GDIPlusReference/Classes/MetafileClass/MetafileConstructors/Metafile_59 fileName_referenceHdc_type_description.asphttp://msdn.microsoft.com/library/ default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusReference/Classes/Metaf ileClass/MetafileConstructors/Metafile_24filename.asphttp://msdn.microsoft.c om/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/metafile.asphttp:// msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/gra phics.aspBonne chance, je vais allez voir votre siteB N J "vic" <vcopovi@wanadoo.fr> a écrit dans le message de news:42dd127f$1@news.pcsoft.fr...
Merci pour tes commentaires. Je crois que tu as raison en ce qui concerne
le constructeur metafile (c'est là le problême car je ne fais qu'aborder ..net)
Toute "ma doc" se réduit à la page suivante
http://msdn.microsoft.com/library/default.asp….
Quelle serait alors la définition de ce constructeur ?
Si l'enregistrement est automatique quelle serait la manip pour nommer le
fichier ?
Je ne sais pas si tu es allé sur notre site et si tu as téléchargé
VectorEye2 (le problême que nous avons c'est que nous voulons nous affranchir du viewer SVG d'Adobe au profit d'un dessin direct avec GDI+), mais si tu me passes la pre-key générée par VE sur ton ordi, je t'enverrai une licence définitive.
Vic Siame
|
| |
| |
| | | |
|
| | |
| |
Publicado em julho, 20 2005 - 8:48 PM |
Rien à faire, ça ne marche pas. Aurais-tu un exemple simple (dessiner un simple carré, avec des noms de fichiers...) ?
Vic |
| |
| |
| | | |
|
| | |
| |
Publicado em setembro, 15 2005 - 11:19 AM |
J'ai tenté de créer une classe GDI+ en windev mais j'ai été bloqué sur les fonction de dessin qui n'affiche rien même si le code ne fait pas d'erreur
ce qui est vraimment étrange c'est que j'ai ecrit exactement le même code sous VB6 et cela fonctionnait
En tout cas j'ai déjà le code d'init de GDI+ et il serait interressant de se mettre a plusieurs pour ecrire ensemble une classe globale pour GDI+ (tracé, export image, dégradés,...)
PS : Je ne comprends pas votre code ce n'est pas du code windev valide.
Attention : Pour utiliser GDI+ en Windev ou VB il faut absolument utiliser l'API Flat |
| |
| |
| | | |
|
| | | | |
| | |
|