IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#]Traitement d' image


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut [C#]Traitement d' image
    Bonjour,

    Je suis débutant en C# et j'ai commencé à faire une petite visionneuse d'image avec des traitements basique comme grisée l'image ou la retourner.

    1)Mon problème vient du traitement de rotation, en effet, lorque je prend une image de plus de 800x600 le programme plante en me disant que j'essaye d'écrire dans une mémoire sécurisée. Par contre avec des images plus petite ou égale à 800x600 cela fonctionne vraiment bien.

    Pour mon code j'ai crée une class Pixel32Image qui contient les bytes red, green et blue. J'initialise deux pointeurs Pixel32Image, un au premier pixel, un au dernier et j'échange leur valeurs en passant par une variable temporaire, tout ca est bien sur dans une boucle qui s'arrête lorsque je suis arrivé au milieu de la hauteur de l'image (height/2). J'ai aussi bloqué l'image en mémoire en lecture/écriture. Je n'arrive pas a comprendre pourquoi ca cloche car en plus j'utilise la même class pour griser les images et là avec une image en 2048x1480 ça fonctionne.

    2)J'aimerais faire un diaporama mais je ne trouve pas de fonction pour faire une pause (équivalent de sleep). Je pense qu'il faut utiliser un timer mais comment comparer les secondes sans bloquer le programme pendant la boucle ??


    Merci

    Bonne journée

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 22
    Par défaut
    Salut,

    Pour le premier probleme peux tu nous donner plus de précisions sur la manière dont tu écris dans le bitmap. Utilise tu la fonction GetPixel / SetPixel ?
    Ou alors passe tu par un tableau en mémoire ?

    Pour le deuxieme pb tu dois utiliser un Thread. Il y a pas mal d'exemples un peu partout.

    a plus

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Par défaut
    Voici le code qui retourne l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    unsafe private void bInverser_Click(object sender, EventArgs e)
    {
    	if (inpBox == true) //Si il y a une image dans la boîte à image
    	{
    		tsProgressBar.Visible = true;   //Affiche la barre de progression
    		Bitmap bmp = new Bitmap((Bitmap)img[i]);
    		PixelFormat pf = bmp.PixelFormat;
    		Rectangle rc = new Rectangle(0, 0, bmp.Width, bmp.Height);
    		BitmapData bmpData = bmp.LockBits(rc, ImageLockMode.ReadWrite, pf);
     
    		Pixel32Data* pdeb, pfin, tmp, pDébut = (Pixel32Data*)bmpData.Scan0;
     
    		tmp = pdeb = pDébut;
    		pfin = pDébut + (bmp.Width * bmp.Height);
    		for (int li = 0; li < bmp.Height/2; li++)
    		{
    			for (int col = 0; col < bmp.Width; col++)
    			{
    				*tmp = *pfin;
    				*pfin = *pdeb;
    				*pdeb = *tmp;
     
    				pdeb++;
    				pfin--;
    			}
     
    			tsProgressBar.PerformStep();    //Incrémente la barre de progression "tsProgressBar"
    		}
     
    		bmp.UnlockBits(bmpData);
     
    		img[i] = bmp;   //Place la nouvelle image dans la liste
    		pBox.Image = bmp;   //Place la nouvelle image inversée dans la boîte à image
     
    		tsProgressBar.Value = 0;    //Remet la barre de progression à 0
    		tsProgressBar.Visible = false;   //Affiche la barre de progression
     
    		tsEtatImage.Text = (etatimg[i] = "Inversée").ToString();    //Nouvelle information sur l'état de l'image
    	}
    }

Discussions similaires

  1. Traitement d'images : quel langage?
    Par belasri dans le forum Langages de programmation
    Réponses: 19
    Dernier message: 07/10/2005, 09h59
  2. Réponses: 5
    Dernier message: 15/01/2005, 18h29
  3. commande c++ pour le traitement d'images
    Par mateo.14 dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2005, 10h46
  4. [lib] Traitement d'images
    Par Gogoye dans le forum Multimédia
    Réponses: 4
    Dernier message: 19/11/2004, 16h15
  5. Traitements d'image sur PNG avec transparence
    Par Ingham dans le forum Langage
    Réponses: 16
    Dernier message: 02/08/2004, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo