Accéder aux propriétés pixels d'une image

cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006 - 23 avril 2003 à 18:56
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006 - 25 avril 2003 à 18:17
bon voila le problème:
j'ai fait un logiciel sympa, qui applique un effet sur des images, tout ça en faisant des petits algorythmes simples sur des images, dont voici l'exemple pour faire un négatif:

for i := 0 to X do begin
for j := 0 to Y do begin
Image1.Canvas.Pixels[X,Y] := $FFFFFF - Image1.Canvas.Pixels[X,Y];
end;
end;

Voilà, le problème c'est qu'un Canvas, ça marche que pour les BMP... et moi je voudrais bien accéder aux propriétés Pixels[X,Y] de l'image, qu'elle soit JPG ou BMP!

J'ai regardé dans le forum "Graphique", j'ai trouvé 1 seul sujet qui aurait pu être intéressant :

uses jpeg...

Bmp := TBitmap.Create;
Pic := TPicture.Create;
Pic.LoadFromFile(etc.);
Bmp.Assign(Pic);
etc.

et avec la méthode Assign, Delphi me répond: Impossible d'assigner un type TPicture au type TBitmap (ou qqchose comme ça...)

quelqu'un à une idée? merci!!

7 réponses

cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
23 avril 2003 à 18:57
ça doit être simple et intuitif, puisque personne n'en parle jamais!
0
woom Messages postés 3 Date d'inscription dimanche 16 février 2003 Statut Membre Dernière intervention 24 avril 2003
24 avril 2003 à 08:16
WOOM réponse:
Tu as deux images. une originale: le JPEG; et une qui va te servir d'espace de travail: le BMP
ImBMP: TBitMap;
ImJPEG: TJPEGimage;

Un fois crées:
ImJPG:=TJEPGimage.create;
IMBmp:=TBitmap.create;

tu charges ton JPEG:
ImJPEG.LoadFromFile('monficiher.jpg');

Tu transfères la taille au bitmap:
ImBMP.Width:=ImJPG.Width;
ImBMP.Height:=ImJPG.Height;

Et tu dessines sur le canvas du bmp:
ImBMP.Canvas.Draw(0,0,ImJPG);

Et tu supprimes ton jpeg:
ImJPG.free;
Et tu utilises ton BMP pour la bidouille.... :)

Le tour en joué. Je ne sais pas faire plus simple.
Woom
0
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
24 avril 2003 à 12:41
je vais essayer...
ça m'a l'air fiable!

mais... après il te reste que le BMP! on peut donc pas sauvegarder en JPG!!???!!

argh,
Costello
0
woom Messages postés 3 Date d'inscription dimanche 16 février 2003 Statut Membre Dernière intervention 24 avril 2003
24 avril 2003 à 13:37
WOOM

Mais oui
Si tu veux sauver en JPEG, tu procède comme cela:
tu crées une instance de JPEGimage
var
transfer : TJPEGImage;

begin
Transfer:=TJPEGImage.Create;

au cas ou il y aurait un problème tu protège ton code dans un bloc TRY .... Except
try

D'abord tu ajuste ton taux de compression
Transfer.CompressionQuality:=80;

Tu copies le Bitmap sur le JPEG (le assign fonctionne dans ce sens!)
Transfer.Assign(LeBitmap);

Tu sauves ton beau jpeg tout neuf
Transfer.SaveToFile(NomComplet);

Tu nettoies ton code
finally
Transfer.Free;
end;

Et hop inthepocket!
8-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
24 avril 2003 à 21:08
oah, merci !!!
bon, ok, ct évident.

merci WOOM!
0
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
24 avril 2003 à 22:14
désolé, j'avais pas essayé.
le problème:

soit erreur (impossible d'assigner x à y)
soit erreur autre (erreur à l'adresse x, offset hxy)

t'as pas un exemple? je l'ai peut être mal fait...
(une petite source, c plus concret)

merci
cost
0
cs_costello Messages postés 136 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 15 février 2006
25 avril 2003 à 18:17
définitive:
c'est bon, ça marche!
j'ai vu la source sur le forum,
merci.
0
Rejoignez-nous