Modification d'image

Résolu
365tib Messages postés 27 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 31 janvier 2007 - 7 oct. 2006 à 10:02
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 - 10 oct. 2006 à 21:12
Bonjours,

J'ai un petit probleme pour modifier une image pixel par pixel, quand j'execute le prog, on me renvoie "ne peut modifier une Image que si elle contient une TBitmap"

une idée???

merci

11 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
7 oct. 2006 à 14:19
Tu peux aussi le charger directement dans un JPEGImage
puis l'assigner à TImage en tant que Bitmap :

Var JPEG : TJPEGImage;
begin
  JPEG := TJPEGImage.Create;
  With JPEG do
  Try
    LoadFromFile('01diver_cine.jpg');
    Image1.Picture.Bitmap.Assign(JPEG);
  Finally
    Free;
  End;
end;

 
@+
Cirec

<hr size ="2" />
3
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
8 oct. 2006 à 00:59
le truc c 'est laisse tomber cette methode pixel par pixel utilise scanline

TypeRGB       = Record
                        Bleu, Vert, Rouge : Byte;
                  End;
  TypeTRGBArray = Array [0..12000] Of TypeRGB; // pour la largeur de l'image
  TypePRGBArray = ^TypeTRGBArray;

...
var
x,y,pix1,pix2,pix:integer;
r1,g1,b1,r2,g2,b2,,r3,g3,b3:integer;
Scan1,Scan2,ScanFIN : TypePRGBArray;

begin

// imageFin est l'image qui va recevoir les pixel de ton image 1 additionne a ceux de ton image 2
// pour avoir un plus bel effet tu devrais regarder a ne pas depasser les valeurs etc etc mais ca je te laisse
//le faire mais je montre juste l'exemple de base
// de plus fait attention a ce que ton image 1 soit = a ton image 2
imageFin.Picture.Bitmap.Width:=image1.Picture.Bitmap.Width;
imageFin.Picture.Bitmap.Height:=image1.Picture.Bitmap.Height;


ImageFIN.Picture.Bitmap.Assign(Image1.Picture.Bitmap);


for y:=1  to image1.Picture.Bitmap.Height-2 do
begin
Scan1:=image1.picture.Bitmap.ScanLine[Y];
Scan2:=image2.picture.Bitmap.ScanLine[Y];
ScanFIN:=imageFIN.picture.Bitmap.ScanLine[Y];


for x:=1  to image1.Picture.Bitmap.Width-2 do
begin


r1 := scan1[x].Rouge;
g1 := scan1[x].Vert;
b1 := scan1[x].Bleu;

r2 := scan2[x].Rouge;
g2 := scan2[x].Vert;
b2 := scan2[x].Bleu;


  r3:=r1+r2;
  g3:=g1+g2;
  b3:=b1+b2;


  scanFin[x].Rouge:=r3;
  scanFin[x].Vert:=g3;
  scanFin[x].Bleu:=b3;

end;;
end;
// tres important sinon tu ne verra pas la difference


imageFin.Refresh;

alors tu vas me dire
putain c'est vachement plus long et plus compliqué que ...bitmap.canvas.pixel[x,y]:= ...
D'accord tu as raison Mais et il y a un MAIS tu vas a peu pres 10 fois plus vite avec cette méthode ( encore que 10 fois c'est pas beaucoup !!! )

Ciao
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
7 oct. 2006 à 11:50
Salut,
donne nous un peut plus de détails et de code ...

quel est le format de l'image ?
comment charges tu l'image ?
dans quel composant charges tu l'image ?

à mon avis tu essayes de modifier une image de type JPG, Gif, PNG ... bref tout sauf du BMP

si c'est le cas (et je pense que oui) il te faut convertir ton image en Bitmap avant de pouvoir la modifier

 
@+
Cirec

<hr size="2" />
0
365tib Messages postés 27 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 31 janvier 2007
7 oct. 2006 à 13:27
Alors, le truck c'est que je joudrais mélanger deux images enssembles.

J'ai deux image jpeg et un composant TImage.

Je prend le pixel[1,1]du premier JPEG et je le met dans TImage, pixel[1,1].(la ça bug déjà).
Puis je prend le pixel[1,2]du 2 eme JPEG et je le met dans TImage, Pixel[1,2].
Et ainsi de suite....
0

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

Posez votre question
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
7 oct. 2006 à 13:56
Salut,

tu assignes un TBitmap à ton jpeg ainsi  (en admettant qu'il soit dans Image1) :
<hr />var
bmp:TBitmap;
begin
    bmp:=TBitmap.Create;
    bmp.Assign(Image1.Picture.Graphic); 
    bmp.Free;
end;
<hr />
Voilà, à partir de là tu as normalement accès aux Pixels

DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
7 oct. 2006 à 14:03
excuse-moi j'avais pas mis toutes les lignes  ... c'est :
<hr />
var
bmp:TBitmap;
begin
    bmp:=TBitmap.Create;
    bmp.Assign(image1.Picture.Graphic);
    Image1.Picture.bitmap.Assign(bmp);
    bmp.Free;
end;
<hr />
DrJerome
0
365tib Messages postés 27 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 31 janvier 2007
7 oct. 2006 à 19:29
Merci Cirec

@+
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
8 oct. 2006 à 01:01
excuse moi mais pix,pix1 et pix 2 ne servent a rien
Ciao
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
8 oct. 2006 à 09:04
salut,

(je reviens en arrière, sinon ok pour scanline par ailleurs) :
en LoadFromFile il y a aussi cette possibilité (=variante)
<hr />
var
bm:TBitmap;
begin
     image1.Picture.LoadFromFile('mon.jpeg');
     bm:=TBitmap.Create;
     bm.Assign(image1.Picture.Graphic);
     image1.Picture.Bitmap.Assign(bm);
     bm.Free;
end;
<hr />(tu peux également traiter avec "try ..finally", il suffit de modifier)

DrJerome
0
365tib Messages postés 27 Date d'inscription vendredi 2 décembre 2005 Statut Membre Dernière intervention 31 janvier 2007
10 oct. 2006 à 19:04
J'ai un petit probleme avec ta méthode Nicolas, il ne me traite pas une partie de l'image.
la partie gauche est donc identique à l'originale.
0
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
10 oct. 2006 à 21:12
ecrit moi ta source je verrai peut etre mieux ...
ciao
0
Rejoignez-nous