Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 31 déc. 2005 à 18:59
Bon voila j avais envie de le terminer ...
Tout marche , aussi bien la fonction PIXELS que la SCANLINE
J ai laisse volontairement les 2 possibilites ds le prog pour apprecier le gain de temps !!!
Et pr finir j ai laisser tomber des fonctions qui ne marchait pas du tonnere
mais elle sont encore ds le code( mis entre {})
Voila j ai enfin realise la fonction que j avias demandé a maurico ...
Si ca peut aider quelqu un ...
Faites signe !
Slt a tous
Nico
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 31 déc. 2005 à 15:09
Voila utilisation de SCANLINE
mais prob avec cette utilisation car prob pr incruster une image
(contrairement a la methode pixel ), doit faire 2 boucles ou alors les images doivent avoir les memes dimensions
(ou l image a incruster doit etre plus grande que l image d'origine pr ne pas deppasser les limites)
Et prob ac l'annulation graphique ???
Merci EddiTheHead
Ciao
Bonne année a tous a l avance
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 31 déc. 2005 à 13:32
---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Project1.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 00470B8B dans le module 'Project1.exe'. Lecture de l'adresse 00000000'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
voici le message d'erreur que je ne comprends pas ....
Merci
Ciao
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 31 déc. 2005 à 03:10
Bon ce n'est toujours pas en scanline mais bon ...
Possibilite d annulation graphique
Possibilite d'avoir une couleur ini et une couleur Max pour le changement de la couleur
Possibilite de voir l'image en grandeur reelle
et pour finir en beaute
Possibilite de bug avec les images de sauvegardes pour l annulation
(Depassement du tableau mais bon on a qd meme 100 images ... ca serait pousser ! )
Par contre des fois ca "plante" et je ne sais pas pour quoi !
Ciao
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 8 oct. 2005 à 01:09
Merci EddiTheHead pour ces informations supplementaires
et assez bien expliquees
j ai regarder ton prog avec la loupe et c est le meme sys que tu utilises ...
Tres clair !
Merci encore a toi ...
Ciao
Nico
EddiTheHead
Messages postés58Date d'inscriptionmercredi 16 février 2005StatutMembreDernière intervention 2 juin 2006 7 oct. 2005 à 21:00
Slt Nicolas,
L'utilisation des ScanLine est très simple et ça rend beaucoup de service. Mais faut connaître les bases :
Une image est composée de 3 paramètres :
- la taille en X (Width - Largeur).
- le taille en Y (Height - Hauteur).
- le codage des couleurs, le plus facile est le 24 bits.
Pourquoi 24 bits? parce qu'un pixel est composé de 3 couleurs de bases, le Rouge, le Vert et le Bleu. Chaqu'une des couleurs de bases est codée sur un octet donc 3 octets x 8 bits = 24 bits.
En mémoire :
: c'est une ligne de 3 pixels
Pour utiliser un pixel, on doit donc déclarer :
Type TypeRGB = Record
Bleu, Vert, Rouge : Byte; // C'est l'ordre de codage en mémoire
End;
Le ScanLine s'utilise sur une ligne de l'image, on doit donc déclarer :
Type TypeRGBArray = Array [0..400] Of TypeRGB; // Si l'image à 400 pixels sur une ligne (Width)
Le ScanLine c'est aussi un pointeur sur une ligne de l'image, on a donc :
Type TypePRGBArray = ^TypeRGBArray; // le signe ^ précise que l'on pointe vers une valeur qui a le format du type "TypeRGBArray"
Tout ça n'est qu'une déclaration de Type de données. Il faut pouvoir utiliser ces informations :
Var ScanSource, ScanDestination : TypePRGBArray;
Voilà pour les déclarations.
Pour l'utilisation, tu as une image :
Var BMPImage : TBitmap;
Tu la charges (on suppose que l'image à 400 pixels par ligne) :
BMPImage := TBitmap.Create;
BMPImage.LoadFromFile('Image.BMP');
BMPImage.PixelFormat := pf24Bit; // Pour forcer le format de l'image
Pour copier la 10ème ligne sur la 20ème (la 1er ligne est en position 0, la 2ème est en position 1, ...) :
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne de l'image
ScanDestination := BMPImage.ScanLine[19]; // Pour pointer sur la 20ème ligne de l'image
ScanDestination := ScanSource;
Pour copier la 5ème pixel sur le 6ème de la 10ème ligne (ici aussi, le 1er pixel est en position 0, ...) :
rem : tu définis d'abord la ligne, ensuite le pixel
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne
ScanSource[5] := ScanSource[4];
Pour accéder au 5ème pixel de la 10ème ligne et mettre son composant bleu à 0 :
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne
ScanSource[4].Bleu := 0;
Ceci n'est q'une base, à toi d'évoluer et de trouver d'autres astuces dans les déclarations et l'utilisations.
Bon amusement.
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 6 oct. 2005 à 17:38
Je viens de me rappeler que Forman a une source dans ce genre! ouai, peut être ...
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 6 oct. 2005 à 17:36
Bon la fonction que je te parlais ... bem ... je t' ai fait "baver" pour rien vu que je ne l' ai jamais postée.
Je pourrai la poster mis faut que j' y jette un oeil car souvent mes fonctions utilisent d' autres fonctions qui utilisent d' autres fonctions etc ... Je vais voir :)
Par contre, j' ai plein de source utilisant le scanline. D' ailleurs, j' ai remarqué qu' un de mes fans (si si, j' en ai ^^) m' a mis 10/10 à pas mal de mes vieilles sources (et non, je n' ai pas un autre compte pour me filer des bonnes notes)!
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 6 oct. 2005 à 17:29
D accord j ai compris ce que tu veux dire ...
Bon je vais qd meme essayer de comprendre qqch a scanline pcq 10 * c'est pas negligable (surtout sur les gd images comme tu as mentionné)
V Essayer d ameliorer tt ca ...
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 6 oct. 2005 à 17:24
N' oublie pas que Scanline est au moins 10 fois plus rapide.
Prenons une couleur à changer:
R: 255
G: 053
B: 039
Une tolérence de 10% permettrait d' inclure à ce "rouge" les rouges voisins.
Imaginons maintenant une photo d' une ferrari rouge. Je vais la "passer" en vert. Les différents tons de rouge (selon le pourcentage de tolérence des couleurs proches) deviendront différents tons de vert. La couleur rouge est remplacée par son équivalent en vert, c' est ce que j' appelle la difference de tonalité conservée!!!
Pour ma source, je vais voir si je l' ai postée ...
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 6 oct. 2005 à 17:15
ET oui au fait donne moi le lien de ta source ou tt au moins son nom parce que j avais bien regarde auparavant pr voir s il y avait pas une source de ce genre et j avais rien vu mais enfin avec le nombre de sources qu il y a sur ce site pas tjs facile de se retrouver et en plus je ne sais pas si ca vient de chez moi ou quoi mais DELPHI.FR n est pas le site le plus rapide , mais ca hein, je vais pas me mettre a raler vu l excellente qualite de ce site ...
Slt
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 6 oct. 2005 à 17:11
Slt Maurico,
J ai pas utilise scanline tt simplement parce que je ne comprends rien a son utilisation.
j ai pourtant regarde plein d exemples sur ce site pr essayer de comprendre mais en vain ...
La tonalite,Kesako????
Aurais tu une proposition a me donner pr par exemples donner a la place d une seule couleur a changer , une couleur minimal et une couleur max ce qui permettrait de changer tt les couleurs comprises entre ces 2 valeurs. (par ex: le vert et le jaune et change ts les couleurs comprises entre ces deux la ...)
Sur quelles tailles d images as tu ravaille?
Moi sur des images de 2004 x 1728 et ca prenait rarement plus de 10 sec(Enfin c clair que scanline est vachement + rapide , je ne conteste ca en rien )
Slt
Nico
cs_MAURICIO
Messages postés2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 6 oct. 2005 à 13:02
C' est très long sur de grandes images.
Pour faire un processus de ce genre, tu dois utiliser le scanline, y a plein de sources sur ce sujet (j' en ai moi même). Pour les moins bon, on peut utiliser la transparence du TBitmap.
J' ai fait une fonction dans cet esprit mais avec un degré de tolérence sur la couleur choisie. Elle permet aussi de conserver la différence de tonalité. Il me semble que je l' ai posté sur ce site ...
31 déc. 2005 à 18:59
Tout marche , aussi bien la fonction PIXELS que la SCANLINE
J ai laisse volontairement les 2 possibilites ds le prog pour apprecier le gain de temps !!!
Et pr finir j ai laisser tomber des fonctions qui ne marchait pas du tonnere
mais elle sont encore ds le code( mis entre {})
Voila j ai enfin realise la fonction que j avias demandé a maurico ...
Si ca peut aider quelqu un ...
Faites signe !
Slt a tous
Nico
31 déc. 2005 à 15:09
mais prob avec cette utilisation car prob pr incruster une image
(contrairement a la methode pixel ), doit faire 2 boucles ou alors les images doivent avoir les memes dimensions
(ou l image a incruster doit etre plus grande que l image d'origine pr ne pas deppasser les limites)
Et prob ac l'annulation graphique ???
Merci EddiTheHead
Ciao
Bonne année a tous a l avance
31 déc. 2005 à 13:32
Notification d'une exception du débogueur
---------------------------
Le projet Project1.exe a provoqué une classe d'exception EAccessViolation avec le message 'Violation d'accès à l'adresse 00470B8B dans le module 'Project1.exe'. Lecture de l'adresse 00000000'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
voici le message d'erreur que je ne comprends pas ....
Merci
Ciao
31 déc. 2005 à 03:10
Possibilite d annulation graphique
Possibilite d'avoir une couleur ini et une couleur Max pour le changement de la couleur
Possibilite de voir l'image en grandeur reelle
et pour finir en beaute
Possibilite de bug avec les images de sauvegardes pour l annulation
(Depassement du tableau mais bon on a qd meme 100 images ... ca serait pousser ! )
Par contre des fois ca "plante" et je ne sais pas pour quoi !
Ciao
8 oct. 2005 à 01:09
et assez bien expliquees
j ai regarder ton prog avec la loupe et c est le meme sys que tu utilises ...
Tres clair !
Merci encore a toi ...
Ciao
Nico
7 oct. 2005 à 21:00
L'utilisation des ScanLine est très simple et ça rend beaucoup de service. Mais faut connaître les bases :
Une image est composée de 3 paramètres :
- la taille en X (Width - Largeur).
- le taille en Y (Height - Hauteur).
- le codage des couleurs, le plus facile est le 24 bits.
Pourquoi 24 bits? parce qu'un pixel est composé de 3 couleurs de bases, le Rouge, le Vert et le Bleu. Chaqu'une des couleurs de bases est codée sur un octet donc 3 octets x 8 bits = 24 bits.
En mémoire :
: c'est une ligne de 3 pixels
Pour utiliser un pixel, on doit donc déclarer :
Type TypeRGB = Record
Bleu, Vert, Rouge : Byte; // C'est l'ordre de codage en mémoire
End;
Le ScanLine s'utilise sur une ligne de l'image, on doit donc déclarer :
Type TypeRGBArray = Array [0..400] Of TypeRGB; // Si l'image à 400 pixels sur une ligne (Width)
Le ScanLine c'est aussi un pointeur sur une ligne de l'image, on a donc :
Type TypePRGBArray = ^TypeRGBArray; // le signe ^ précise que l'on pointe vers une valeur qui a le format du type "TypeRGBArray"
Tout ça n'est qu'une déclaration de Type de données. Il faut pouvoir utiliser ces informations :
Var ScanSource, ScanDestination : TypePRGBArray;
Voilà pour les déclarations.
Pour l'utilisation, tu as une image :
Var BMPImage : TBitmap;
Tu la charges (on suppose que l'image à 400 pixels par ligne) :
BMPImage := TBitmap.Create;
BMPImage.LoadFromFile('Image.BMP');
BMPImage.PixelFormat := pf24Bit; // Pour forcer le format de l'image
Pour copier la 10ème ligne sur la 20ème (la 1er ligne est en position 0, la 2ème est en position 1, ...) :
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne de l'image
ScanDestination := BMPImage.ScanLine[19]; // Pour pointer sur la 20ème ligne de l'image
ScanDestination := ScanSource;
Pour copier la 5ème pixel sur le 6ème de la 10ème ligne (ici aussi, le 1er pixel est en position 0, ...) :
rem : tu définis d'abord la ligne, ensuite le pixel
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne
ScanSource[5] := ScanSource[4];
Pour accéder au 5ème pixel de la 10ème ligne et mettre son composant bleu à 0 :
ScanSource := BMPImage.ScanLine[9]; // Pour pointer sur la 10ème ligne
ScanSource[4].Bleu := 0;
Ceci n'est q'une base, à toi d'évoluer et de trouver d'autres astuces dans les déclarations et l'utilisations.
Bon amusement.
6 oct. 2005 à 17:38
6 oct. 2005 à 17:36
Je pourrai la poster mis faut que j' y jette un oeil car souvent mes fonctions utilisent d' autres fonctions qui utilisent d' autres fonctions etc ... Je vais voir :)
Par contre, j' ai plein de source utilisant le scanline. D' ailleurs, j' ai remarqué qu' un de mes fans (si si, j' en ai ^^) m' a mis 10/10 à pas mal de mes vieilles sources (et non, je n' ai pas un autre compte pour me filer des bonnes notes)!
6 oct. 2005 à 17:29
Bon je vais qd meme essayer de comprendre qqch a scanline pcq 10 * c'est pas negligable (surtout sur les gd images comme tu as mentionné)
V Essayer d ameliorer tt ca ...
6 oct. 2005 à 17:24
Prenons une couleur à changer:
R: 255
G: 053
B: 039
Une tolérence de 10% permettrait d' inclure à ce "rouge" les rouges voisins.
Imaginons maintenant une photo d' une ferrari rouge. Je vais la "passer" en vert. Les différents tons de rouge (selon le pourcentage de tolérence des couleurs proches) deviendront différents tons de vert. La couleur rouge est remplacée par son équivalent en vert, c' est ce que j' appelle la difference de tonalité conservée!!!
Pour ma source, je vais voir si je l' ai postée ...
6 oct. 2005 à 17:15
Slt
6 oct. 2005 à 17:11
J ai pas utilise scanline tt simplement parce que je ne comprends rien a son utilisation.
j ai pourtant regarde plein d exemples sur ce site pr essayer de comprendre mais en vain ...
La tonalite,Kesako????
Aurais tu une proposition a me donner pr par exemples donner a la place d une seule couleur a changer , une couleur minimal et une couleur max ce qui permettrait de changer tt les couleurs comprises entre ces 2 valeurs. (par ex: le vert et le jaune et change ts les couleurs comprises entre ces deux la ...)
Sur quelles tailles d images as tu ravaille?
Moi sur des images de 2004 x 1728 et ca prenait rarement plus de 10 sec(Enfin c clair que scanline est vachement + rapide , je ne conteste ca en rien )
Slt
Nico
6 oct. 2005 à 13:02
Pour faire un processus de ce genre, tu dois utiliser le scanline, y a plein de sources sur ce sujet (j' en ai moi même). Pour les moins bon, on peut utiliser la transparence du TBitmap.
J' ai fait une fonction dans cet esprit mais avec un degré de tolérence sur la couleur choisie. Elle permet aussi de conserver la différence de tonalité. Il me semble que je l' ai posté sur ce site ...