Sauvegarder du texte en jpg [Résolu]

csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 15 mai 2006 à 17:04 - Dernière réponse : csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention
- 19 mai 2006 à 16:03
Bonjour,



je travaille en Delphi 6.

J'ai un RicheEdit, dans lequel je copie du texte =>REdTxtJoint.PasteFromClipboard;



Cependant, je voudrais enregistrer ce texte au format image du genre montexte.jpg.



Je ne sais pas comment récupérer mon texte et le convertir en image.



Avez-vous une idée ou un site qui pourrais m'aider.



UN TOUT GRAND MERCI


CSweety13
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
jlen100 1651 Messages postés samedi 10 juillet 2004Date d'inscription 25 juillet 2014 Dernière intervention - 15 mai 2006 à 18:43
3
Merci
salut,

tu peux envoyer ton texte dans un bitmap en utilisant un scanline qui
te permets d'accéder à la matrice et ensuite tu peux sauver ton bitmap
en jpeg

(je ne vois tas très bien ce que cela vas donner ...)

maintenant si tu veux sauver ton texte sous forme d'une image écris directement dans les canvas d' un bitmap en utilisant un

Bitmap.Canvas.TextOut(N°de colonne,N°Ligne,'Mon Texte') et ensuite tu sauves en jpeg



@+

jlen

Merci jlen100 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de jlen100
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 15 mai 2006 à 19:25
3
Merci
Salut,

Voici un petit exemple qui permet de sauvegarder la partie visible du texte d'un RichEdit

procedure TForm1.Button1Click(Sender: TObject);
Var TmpBmp : TBitmap;
Begin
TmpBmp := TBitmap.Create;
With TmpBmp Do
Try
Width : = RichEdit1.Width;
Height:= RichEdit1.Height;
BitBlt(Canvas.Handle, 0, 0, Width, Height, Form1.Canvas.Handle, RichEdit1.Left, RichEdit1.Top, srcCopy);
TmpBmp.SaveToFile('RichEdit.bmp');
Finally
TmpBmp.Free;
End;
End;

@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Cirec
Meilleure réponse
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 18 mai 2006 à 23:05
3
Merci
Salut CSweety13,

Va voir ici : Saving a RichEdit to a Metafile

Ce code génial permet de sauver le contenu d'un TRichEdit dans un fichier image de type Metafile (*.EMF).
Je n'ai pas eu le temps de tout comprendre, mais ça fonctionne du tonnerre de Zeus...

Bonne prog'

[mailto:j@pee j@pee]

Merci japee 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de japee
Meilleure réponse
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 18 mai 2006 à 23:35
3
Merci
ça y est j'ai trouvé :

ajouter dans la procédure :
procedure DumpRTFToPagedEMFs(hWndRTFControl : HWND; szEMFFileTitleBase : LPTSTR);
var
  szMetaName : string;
  nRTFTextLength, nStart, nPage : integer;
  hRefDC : HDC;
  rcMeta : TRECT;
  hEMF :   HENHMETAFILE;



begin

    // First, determine how many chars are in the RTF
    nRTFTextLength := GetRTFTextLength( hWndRTFControl );
    // Get a reference DC (based on a printer)
    hRefDC := GetPrinterDC();
    If hRefDC = 0 Then Exit;   // ajouter cette ligne et c'est bon
    // Set up the meta RECT for 0.01mm units














@+
Cirec

Merci Cirec 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de Cirec
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 16 mai 2006 à 13:33
0
Merci
<!--StartFragment -->


Hi,


Je n'ai pas mieux que la méthode de Cirec...
L'inconvénient majeur de cette manière de procéder est qu'il ne faut pas qu'une application "stay on top" recouvre le RichEdit au moment de la capture.
Pour convertir le Bmp en fichier Jpeg, voici une petite procedure simple et efficace.

uses Jpeg;

procedure SaveBmpToJpegFile(const Bmp: TBitmap; const FileName: TFileName);
const
TauxCompressionJpg = 100;
begin
with TJPEGImage.Create do
try
CompressionQuality : = TauxCompressionJpg;
Assign(Bmp);
SaveToFile(FileName);
finally
Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var TmpBmp: TBitmap;
begin
TmpBmp := TBitmap.Create;
with TmpBmp do
try
Width : = RichEdit1.Width;
Height:= RichEdit1.Height;
BitBlt(Canvas.Handle, 0, 0, Width, Height, Form1.Canvas.Handle, RichEdit1.Left, RichEdit1.Top, srcCopy);
//SaveToFile('RichEdit.bmp');
SaveBmpToJpegFile(TmpBmp, 'RichEdit.jpg'); // <- avant Free
finally
Free;
end;
end;

Bonne prog'

j@pee
Commenter la réponse de japee
csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 17 mai 2006 à 11:24
0
Merci
Bonjour et merci pour vos réponses.


j'ai bien essayé avec la fonction BitBlt. cela fonctionne.

Mais il me reste un soucis : c'est que le richtext peut contenir un
texte relativement grand et ainsi déclencher ainsi les scrollbar.

Avec la fonction BitBlt, il ne me récupère que la partie visible du texte du richtext.


Cette méthode-là ne me satisfait donc que temporairement


merci encore!

CSweety13
Commenter la réponse de csweety13
japee 1799 Messages postés vendredi 27 décembre 2002Date d'inscription 19 juillet 2018 Dernière intervention - 17 mai 2006 à 11:54
0
Merci
Si tu veux un complément d'aide, peux-tu préciser :

- pourquoi ne pas récupérer le texte dans au format txt, doc ou autre ?

et sinon :

- pourquoi vouloir récupérer le texte au format jpg,
- la taille de cette image jpg,
- le texte est-il n'est-il pas susceptible de déborder du format de cette image ?

Bonne prog'
Commenter la réponse de japee
csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 17 mai 2006 à 12:00
0
Merci
Japee,


J'ai besoin de récupérer mon texte FORMATE en image, car ensuite je
dois l'imprimer en tant qu'image. (la référence au fichier image se
fait dans un fichier XML).


La taille de l'image doit être dépendante de la taille du texte, le
richedit s'ajustant automatiquement avec les scrollbox au texte qui est
à l'interieur.

J'espère avoir été assez claire...

CSweety13
Commenter la réponse de csweety13
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 18 mai 2006 à 23:30
0
Merci
@ Japee :

super ce code, c'est vraiment génial (à étudier absolument)

Un petit bug toute fois (qui peut devenir gros)
Si au moment de la selection de l'imprimante tu cliques sur Annuler tu te retrouves avec des centaines de fichiers *.emf, de quelques octets, (j'en ai moi même eu 1113) mais si on choisi Ok alors tout est Ok

Si quelqu'un trouve pourquoi ...

@+
Cirec
Commenter la réponse de Cirec
csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 19 mai 2006 à 14:22
0
Merci
C'est génial!!!



J'ai presque tout compris sauf la partie où tu fais appel à la fonction PrintDlg por avoir un HDC.


Est-ce pour avoir la taille et la résolution standard pour l'impression ?



Pourrait-on utiliser juste un CreateDC ou utiliser un DC existant ?


CSweety13
Commenter la réponse de csweety13
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 mai 2006 à 14:47
0
Merci
Salut,

Alors essaye en modifiant le code comme ceci (Toujours dans la même procédure):

    // First, determine how many chars are in the RTF
    nRTFTextLength := GetRTFTextLength( hWndRTFControl );
    // Get a reference DC (based on a printer)
    //hRefDC := GetPrinterDC();        <------ Mettre cette ligne en commentaire
    // Get a reference DC         
    hRefDC : = CreateDC('DISPLAY', Nil, Nil, Nil);       <-----  et ajouter celle-ci
    If hRefDC = 0 Then Exit;

Voila et le PrinterDialog ne s'affiche plus

@+
Cirec
Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 mai 2006 à 15:32
0
Merci
ps : ne pas oublier de liberer le Dc qui a été crée:

        // clean up
        DeleteEnhMetaFile( hEMF );
        inc(nPage);
        if nStart = 0 then
         break;
    end;
    DeleteDc(hRefDC);     // <----------- Ajouter cette ligne
end;

@+
Cirec
Commenter la réponse de Cirec
csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 19 mai 2006 à 15:35
0
Merci
merci beaucoup pour ton aide...


J'ai bien vite avancé!!! 

CSweety13
Commenter la réponse de csweety13
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 mai 2006 à 15:53
0
Merci
Il faut surtout remercier Japee pour avoir mis la main sur ce code qui est absolument génial,
je n'ai fais que corriger un oubli de l'auteur et une petite modification pour ne plus avoir le PrinterDialog,
mais ça c'est facile à faire quand le gros du code tourne correctement

En tout cas ce petit bout de code ouvre de nouvelles possibilités ...
















@+
Cirec
Commenter la réponse de Cirec
csweety13 20 Messages postés vendredi 7 mars 2003Date d'inscription 6 août 2008 Dernière intervention - 19 mai 2006 à 16:03
0
Merci
Et quelles possibilités!!!...

CSweety13
Commenter la réponse de csweety13

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.