Modification d'image [Résolu]

365tib 27 Messages postés vendredi 2 décembre 2005Date d'inscription 31 janvier 2007 Dernière intervention - 7 oct. 2006 à 10:02 - Dernière réponse : Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention
- 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
Afficher la suite 

11 réponses

Répondre au sujet
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 7 oct. 2006 à 14:19
+3
Utile
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" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 8 oct. 2006 à 00:59
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Nicolas___
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 7 oct. 2006 à 11:50
0
Utile
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" />
Commenter la réponse de Cirec
365tib 27 Messages postés vendredi 2 décembre 2005Date d'inscription 31 janvier 2007 Dernière intervention - 7 oct. 2006 à 13:27
0
Utile
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....
Commenter la réponse de 365tib
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 7 oct. 2006 à 13:56
0
Utile
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
Commenter la réponse de DRJEROME
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 7 oct. 2006 à 14:03
0
Utile
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
Commenter la réponse de DRJEROME
365tib 27 Messages postés vendredi 2 décembre 2005Date d'inscription 31 janvier 2007 Dernière intervention - 7 oct. 2006 à 19:29
0
Utile
Merci Cirec

@+
Commenter la réponse de 365tib
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 8 oct. 2006 à 01:01
0
Utile
excuse moi mais pix,pix1 et pix 2 ne servent a rien
Ciao
Commenter la réponse de Nicolas___
DRJEROME 447 Messages postés jeudi 9 janvier 2003Date d'inscription 5 février 2015 Dernière intervention - 8 oct. 2006 à 09:04
0
Utile
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
Commenter la réponse de DRJEROME
365tib 27 Messages postés vendredi 2 décembre 2005Date d'inscription 31 janvier 2007 Dernière intervention - 10 oct. 2006 à 19:04
0
Utile
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.
Commenter la réponse de 365tib
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 10 oct. 2006 à 21:12
0
Utile
ecrit moi ta source je verrai peut etre mieux ...
ciao
Commenter la réponse de Nicolas___

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.