Salut à tous
Y a t il un moyen rapide pour convertir les formats usuels (bmp, gif, png, jpeg, tiff, ...) en bitmap afin d'utiliser scanline ?
Merci.
Salut à tous
Y a t il un moyen rapide pour convertir les formats usuels (bmp, gif, png, jpeg, tiff, ...) en bitmap afin d'utiliser scanline ?
Merci.
La librairie GraphicEx permet de charger ces formats.
Je ne l'ai utilisé que avec des TImage (qio ont une propriétés Picture.Bitmap).
Cela dépend de la version de Delphi
En XE2, JPEG, PNG, ... sont gérés par le TPicture, donc tu peux utiliser Graphic
Le TPicture utilise des classes héritant de TGraphic, une Factory utilise l'extension de l'image pour déterminer la classe a instancier recensée dans la Class Registry accessible via RegisterFileFormat
Ce Graphic peut être assigné à un TBitmap par Assign
Si tu veux gérer manuellement le type sans passer par TPicture, utilise TJPEGImage ou TPngImage, TGIFImage
Ensuite pour les formats comme TIFF, il te faut une librairie externe ou utiliser TWICImage qui se comporte comme le TPicture mais c'est fois si ce n'est pas du code Delphi mais les API Windows Imaging Component (WIC)
Après, tu as d'autres lib chez JEDI ou Graphic32 !
certaines lib ajoutent via RegisterFileFormat de nouveau TGraphic pour des formats non gérés nativement ou remplacer la classe standard par une classes plus performante
Salut, comment utiliser assign ?
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Image1.Picture.LoadFromFile(OpenPictureDialog.FileName); Image1.Picture.Bitmap.Assign(Image1.Picture.Graphic);
Ah oui tu ne cherche pas plus de 5 secondes !
Décortiquons cette ligne !
Code : Sélectionner tout - Visualiser dans une fenêtre à part Image1.Picture.Bitmap.Assign(Image1.Picture.Graphic);
Image1.Picture contient une Image disons un JPEG
Image1.Picture.Bitmap, mince le TPicture contient un JPEG, le programmeur veut un bitmap, on libère le JPEG et l'on créé un Bitmap vide
.Assign(Image1.Picture.Graphic), maintenant, Picture contient un Bitmap Vide, et on lui affecte ce qu'il contient !
C'est balot non !
Reprise de Texte sur image JPEG ou Socket et envoi d'image
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 TJPEGImage* DummyJPEg = new TJPEGImage(); try { DummyJPEg->LoadFromFile("C:\\Dossier\\Fichier.JPEG"); TJPEGImage* DummyBitmap = new TBitmap(); try { DummyBitmap->Assign(DummyJPEg); DummyBitmap->Canvas->ScanLine... } __finally { delete DummyBitmap; } __finally { delete DummyJPEg; } }
Salut,
J'ai trouvé comment faire :
Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Image1.Picture.LoadFromFile(OpenPictureDialog.FileName); Bitmap := TBitmap.Create; Bitmap.Assign(Image.Picture.Graphic); Bitmap.PixelFormat := pf24bit;// ou le format souhaité
Oui Assign, c'est mieux qu'un Draw(0, 0...)
Si tu veux éviter d'avoir un TImage sur la Form, tu dois pouvoir créer ton Picture à la volée, j'avoue n'avoir jamais essayé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Bitmap := TBitmap.Create; try with TPicture.Create() do try LoadFromFile(OpenPictureDialog.FileName); Bitmap.Assign(Graphic); Bitmap.PixelFormat := pf24bit; finally Free(); end; Bitmap.ScanLine(); finally Bitmap.Free(); end;
Bonjour,
Sinon, il y a aussi cette possibilité pour récupérer le BitMap d'un fichier-image afin de pouvoir ensuite manipuler les Scanline's de ce BitMap:
A+.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 uses axCtrls; // pour TOleGraphic function BMPdeIMG(const nomFichierImg : string) : tBitMap; const FormatsSupportes = '.BMP.DIB.GIF.ICO.JIF.JPG.WMF.EMF'; var OleGraphic: TOleGraphic; FS: TFileStream; ext : string; img : tImage; begin ext:=UpperCase(ExtractFileExt(nomFichierImg)); if (ext='') or (pos(ext,FormatsSupportes)=0) then begin showMessage(ext+' = Format non supporté par BMPdeIMG'); Result:=nil; EXIT; end; OleGraphic := TOleGraphic.Create; FS := TFileStream.Create(nomFichierImg, fmOpenRead or fmSharedenyNone); img:= tImage.Create(Application); try OleGraphic.LoadFromStream(FS); img.Picture.Assign(OleGraphic); Result :=tBitmap.create; with Result do begin PixelFormat:=pf24Bit; Width :=img.Picture.Width; Height:=img.Picture.Height; Canvas.Draw(0, 0, img.Picture.Graphic); end; finally fs.Free; img.free; OleGraphic.Free; end; end; // BMPdeIMG
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager