365tib
Messages postés27Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention31 janvier 2007
-
7 oct. 2006 à 10:02
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 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"
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 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;
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 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;
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
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 !!! )
365tib
Messages postés27Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention31 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....
Vous n’avez pas trouvé la réponse que vous recherchez ?
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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)