didulle
Messages postés1Date d'inscriptionvendredi 7 janvier 2005StatutMembreDernière intervention15 mars 2006
-
15 mars 2006 à 16:12
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 2022
-
17 mars 2006 à 02:13
Salut tout le monde
j'aimerais utilisé une variable de type bmp sur laquelle j'effectue des traitements. mais dés que je l'affecte à l'image il y a rien
exemple
bmp:tbitmap;
pour changer la couleur de certains pixels
bmp.Canvas.Pixels[i,j]:=Tabc[R]; avec Tabc un tableau de couleur
ca marche quand je travaille directement sur une timage mais c'est trés long.je voulais savoir si c possible de travailler directement sur un tbitmap.
merci d'avance
walid2876
Messages postés49Date d'inscriptionmardi 26 avril 2005StatutMembreDernière intervention31 août 2008 15 mars 2006 à 19:50
Verifier d'abord si ton bitmap n'est pas vide sinon tt tes opertations sont nulles
pixels est un tableau vide au demarrage (lorsque on creer le bmp)
soit tu l'assigne une image bmp.assign(image1.picture.bitmap)) et ensuite tu fais tes opertations
soit si tu veux demarrer a blanc tu dois donner une taille a ton bitmap (bmp.width,bmp.height)
et ensuite tu dessine directement sur ton bitmap
1024 = 1 KiloBytes*8 1 Bytes 8 bits
1024*8 = 8096 bits*4 4 Bytes (R,G,B,c" :: $00FFFFFF :: Int 32bits :: c" n'est pas pris en compte car on considere dans les cas generaux RGB que c" $00 = contexte du peripherique)
-1 = 32767
0..32767 = 32768 entrées possible
taille maximale de l'image : 32768 x 32768 x 32bitstaille maximale de l'image sur disque : 4 294 967 296 octets High(LongWord) 4Go
4Go = Taille maximale d'un fichier sur un disque NTFS/FAT32/DVDUDF
...
procedure Negativaze(const Src : TBitmap; Dest : TBitmap);
{/!\ conseil : Dest n'est pas definit en OUT ou VAR pour pouvoir directement assigner
certain objet TBitmap directement (ImageN.Picture.Bitmap), sinon il y aurait
une erreur de passage de constante en parametre VAR, a la compilation}
var
ScrLines,{Src}
BufLines {Buf} : PRGBArray; // Pointeurs sur tableau RGB pour le scanline
X,Y : integer;
nRGB : TRGBRec; // Pixel temporaire
Buf : TBitmap; // un buffer qui permet de faire les traitements post assignation
begin
{partie 1 :: creation du buffer, initialisation post traitement ----- }
Buf := TBitmap.Create; // creation du buffer
Buf.PixelFormat := pf24bit; // 24bits (R*G*B)
Buf.Width := Src.Width; // Dimensions du buffer
Buf.Height := Src.Height;
{partie 2 :: traitement de l'image}
{/!\ conseil : evitez les appel repetitif a un tableau (tableau[indice])
cela degrade fortement les performances, n'assignez pas non plus de pointeurs
aux valeurs provenant de la source (considerez la en Lecture seule!),
vous pouvez par contre assigner des pointeurs sur le buffer si necessaire}
{partie 2A :: recuperation des lignes de pixels Source/Destination --- }
{partie 2B :: traitement des pixels source --------------------------- }
for X := 0 to Src.Width-1 do begin
nRGB := ScrLines[X]; // recuperation du pixel X source
with nRGB do begin
R := 255-R;
G := 255-G;
B := 255-B;
end;
BufLines[X] := nRGB; // assignation au pixel X du buffer
end;
end;
{partie 3 :: renvois du buffer dans la destination ------------------- }
// on assigne le buffer a l'image de destination
Dest.Assign(Buf);
// On peu egalement faire ceci :
// Dest.Width := Buf.Width;
// Dest.Heigth := Buf.Height;
// Dest.PixelFormat := pf24bit;
// Dest.Canvas.Draw(dx,dy,Buf);
// Mais il faudrat rafraichir l'image aprés cette procedure,
// comme cela : imageN.Refresh;
{/!\ conseil : on ne peu pas faire cela, meme si Dest et Buf sont
de type identique : Dest := Buf; }
{partie 4 :: fin ----------------------------------------------------- }
// on libere le buffer
{/!\ conseil : meme si une fin de procedure ou fonction libere
automatiquement les variables utilisée, il est fortement recommendé de
TOUJOURS liberer les instances de classes créées "manuellement" (create)
dans cette derniere, grace a la methode Free et non Destroy (voir l'aide
Delphi au sujet de "Free/Destroy")}
Buf.free;
end;
voila je pense avoir tout mis ici. si avec cela tu ne t'en sort toujours pas ... ben ...