begin process at 2010 02 10 06:15:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > MISE EN NOIR ET BLANC D'UNE TIMAGE

MISE EN NOIR ET BLANC D'UNE TIMAGE


 Information sur la source

Note :
Aucune note
Catégorie :Graphique Niveau :Débutant Date de création :07/11/2001 Vu / téléchargé :2 543 / 136

Auteur : morpheus

Ecrire un message privé
Site perso
Commentaire sur cette source (16)
Ajouter un commentaire et/ou une note

 Description

C'est un code assez simple mais reservé aux ordi a processeur 633MHz et + car la conversion d'une image tres petite est assez longue.

Copier ce source dans une procédure ButtonClick et ajouter deux TImages :
- le premier, nomé image1, contient l'image de départ.
- le second, nommé image2, contient l'image d'arrivée.

Source

  • var //def des variables
  • x,y:integer;
  • pix,r,v,b:variant;
  • begin
  • for x:=1 to image1.picture.width do //on prend une ligne
  • begin
  • for y:=1 to image1.picture.height do //les colonnes de cette ligne
  • begin
  • pix:=image1.canvas.Pixels[x,y]; //on prend les couleurs RVB
  • r:=int(pix mod 256); //rouge
  • V := Int((pix - r) / 256 Mod 256); //vert
  • B := Int((pix - r) / 256 / 256); //bleu
  • R := (r + V + B) / 3; //ajout des trois couleurs puis division par trois pour obtenir un niveau de gris
  • image2.Canvas.pixels[x,y]:=rgb(r,r,r); //ecriture du pixel en N&B a la même place sur l'autre Timage
  • end;
  • end; //end du bloc qui dboute avant for y:=1 to ...
var                                         //def des variables

x,y:integer;
pix,r,v,b:variant;

begin
for x:=1 to image1.picture.width do          //on prend une ligne
begin
for y:=1 to image1.picture.height do         //les colonnes de cette ligne
    begin
    pix:=image1.canvas.Pixels[x,y];              //on prend les couleurs RVB
    r:=int(pix mod 256);                         //rouge
    V := Int((pix - r) / 256 Mod 256);           //vert
    B := Int((pix - r) / 256 / 256);             //bleu
    R := (r + V + B) / 3;                        //ajout des trois couleurs puis division par trois pour obtenir un niveau de gris
    image2.Canvas.pixels[x,y]:=rgb(r,r,r);       //ecriture du pixel en N&B a la même place sur l'autre Timage
    end;
end;                                             //end du bloc qui dboute avant for y:=1 to ... 

 Conclusion

Vous pouvez aussi ne pas changer de TImage, c'est a dire avoir directement l'image décoloréé dans le TImage d'origine en modifiant les "image2." en "image1."

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

DIVISION PAR DEUX DE LA TAILLE D'UNE IMAGE DANS UNE TIMAGE

 Sources de la même categorie

Source avec Zip Source avec une capture EFFET VITRE ET THUMBNAILS SOUS VISTA par Bacterius
Source avec Zip Source avec une capture ANAGLYPHEUR OU COMMENT VOIR EN RELIEF LES STÉRÉOSCOPES ANCES... par jfs59
Source avec Zip Source avec une capture DÉFORMER UNE IMAGE AUX DIMENSIONS D'UN QUADRANGLE QUELCONQUE... par FFCAST
Source avec Zip Source avec une capture THREAD ET BITMAP (DESSIN AU CRAYON) par barbichette
Source avec Zip Source avec une capture ÉCRAN DE VEILLE FEU D'ARTIFICE par barbichette

Commentaires et avis

Commentaire de BlackWizzard le 06/07/2002 19:13:16 administrateur CS

C tres proche des fonctions ecrites en VB ou en C...
si t'a besoin dinstpirations ou d'algorytmes, http://www.vbfrance.com/article.aspx?Val=4800

Commentaire de balgrim le 26/10/2002 21:23:11

var
x,y:integer;
pix:dword;
r,g,b:byte;
moyenne:byte;

begin
for x:=1 to image1.picture.width do                 //on prend une ligne
begin
for y:=1 to image1.picture.height do                 //les colonnes de cette ligne
        begin
        pix:=image1.canvas.Pixels[x,y];                         //on prend les couleurs RVB
        asm
        push eax
        mov eax,pix
        mov r,al
        mov g,ah
        shr eax,16
        mov b,al
        pop eax
        end;
        moyenne:=Byte((r+g+b)/3)
        image2.Canvas.pixels[x,y]:=rgb(moyenne,moyenne,moyenne);           //ecriture du pixel en N&B a la même place sur l'autre Timage
        end;
end;

Commentaire de balgrim le 26/10/2002 21:24:11

sa doit etre plus rapide...

@ller, bye
Balgrim[oire]

Commentaire de ender27 le 11/03/2008 11:32:08

J'ai un problème avec le code de morpheus, car lorsque l'image apparaît dans le TImage numéro2, elle se trouve agrandie par rapport à l'image de départ. Savez-vous d'où vient ce problème?

Commentaire de arckhenstone le 30/03/2009 09:40:15

Ton code ne fonctionne pas Balgrim... enfin pas sur ma version DELPHI (j'utilise la 7)

Commentaire de arckhenstone le 30/03/2009 10:38:28

quelqu'un aurait un site ou un lien web a me conseiller pour un programme qui permet de mettre une image en NOIR et BLANC et pas en niveau de gris ?
Merci d'avance.
Sinon comme pour ender27, mon image est grossie après la mise en niveau de gris?

Commentaire de Renfield le 30/03/2009 10:47:13 administrateur CS

c'est exactement la même chose que ce qui t'es proposé ici.

a toi de choisir le seuil a partir duquel une couleur sera représentée en noir, ou en blanc...

Commentaire de arckhenstone le 31/03/2009 09:02:44

Donc ca me donnerai en gros ça comme code ?
je dois avoir des erreur ... ca ne marche pas :(



procedure TForm1.BiChromieClick(Sender: TObject);
const
seuil=128;
var
x,y:word;
begin

  for x:=0 to image1.picture.width do // pour les x
  begin

      for y:=0 to image1.picture.height  do // pour les y
      begin
          if image1.Picture.Bitmap.Canvas.Pixels [x,y]>seuil then
          image1.Picture.Bitmap.Canvas.Pixels [x,y] =255 else image1.Picture.Bitmap.Canvas.Pixels [x,y]=0;
      end;

  end;

end;

Commentaire de Renfield le 31/03/2009 09:37:57 administrateur CS

testes le seuil sur la valeur de gris.

et blanc, c'est pas 255
mais rgb(255,255,255)


Commentaire de arckhenstone le 31/03/2009 10:21:56

Yes !!! maintenant mon image est bien tramer en noir et blanc MAIS lol :(
il y a de multiples pixels blanc comme si mon image n'était pas propre
par exemple j'ai une image toute noire avec un cercle blanc dessus et en fait autour du cercle blanc
j'ai une panoplie de petit point blanc :s



voici le nouveau code :


procedure TForm1.BiChromieClick(Sender: TObject);
Const
seuil=128;
Var
x,y:word;
begin

  for x:=0 to image1.picture.width do
  begin

      for y:=0 to image1.picture.Height do
      begin
          if image1.Picture.Bitmap.Canvas.Pixels [x,y]>seuil then
          image1.Picture.Bitmap.Canvas.Pixels [x,y]:=rgb(255,255,255) else image1.Picture.Bitmap.Canvas.Pixels [x,y]:=0;
      end;

  end;

end;



encore merci pour ton aide Renfield :D c'est super sympa !

Commentaire de cirec le 31/03/2009 11:11:22 administrateur CS

regarde ça:
http://www.delphifr.com/codes/TRAMAGE-IMAGE-NOIR-BLANC_45961.aspx

Commentaire de arckhenstone le 31/03/2009 11:19:32

j'y ai déjà été, mais malheureusement, avec l'ordi qu'il m'ont filé sur mon lieu de stage je ne peux rien dlw... donc je ne peux pas accéder au ligne du code...
Merci quand même Cirec.

Commentaire de cirec le 31/03/2009 11:47:22 administrateur CS

c'est pas un problème cliques sur UTramage.pas et tu pourras visualiser le code et faire un copier coller au pire

Commentaire de arckhenstone le 31/03/2009 14:07:41

Voila j'ai réussi à mettre mon image en noir et blanc sans aucun soucil.
Meric pour votre aide.

procedure TForm1.BiChromieClick(Sender: TObject);
Const
seuil=128;
filtrage=$ffffff; //blanc
Var
x,y,A,B:word;
begin
x:=A+1;
x:=B-1;
  for x:=0 to image1.picture.width-1 do
  begin

      for y:=0 to image1.picture.Height-1 do
      begin
          if image1.Picture.Bitmap.Canvas.Pixels [x,y]and $ff>seuil then
          image1.Picture.Bitmap.Canvas.Pixels [x,y]:=$ffffff else image1.Picture.Bitmap.Canvas.Pixels [x,y]:=$000000;

      end;
  end;

end;


Lol maintenant il faudrait que grâce à mon image noir et blanc je trouve le centre de gravité de l'image en utilisant le calcul des moments géométriques. Et aussi, complétement à part, que je mette dans un afficheur la luminosité moyenne de l'image
Lol dure la première semaine à faire du DELPHI :s

Une idée ? lol

Commentaire de cirec le 31/03/2009 14:14:25 administrateur CS

oui le forum ;)

poste tes questions sur le forum parce qu'ici tu auras très peut de chances d'avoir une réponse !!!!

Commentaire de arckhenstone le 31/03/2009 14:38:56

oki je te remercie :)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales