Comment redimensionner une image sans agrandir son contenu

Résolu
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 - 29 déc. 2006 à 23:25
projetf Messages postés 26 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 27 avril 2009 - 1 mai 2007 à 14:16
Bonjour, je développe présentement une application de traitement d'images (qui commencera par ressembler à Paint) afin de faire un module pour une application (sans but d'être meilleur que les autres, juste pour apprendre).

Mon problème est le suivant: Je possède une zone de travail qui s'agrandit/se rétrécit lorsqu'on redimensionne la fenêtre (pour l'instant c'est comme ça). J'ai en même temps un bitmap & un Graphics en mémoire qui retient tout ce qui apparait dans la zone de travail. Or, je voudrais agrandir/rétrécir le Bitmap mais sans redimensionner l'image (donc ajouter ou retirer des pixels).

void MainFormResize(object sender, EventArgs e){
  _sbpMessage.Text = string.Format("New size: {0}x{1} pixels",_pnlDraw.Width,_pnlDraw.Height);
  Bitmap _bitmap2 = new Bitmap(_pnlDraw.Width,_pnlDraw.Height);
  Graphics grph = Graphics.FromImage(_bitmap2);
  if ((_bitmap2.Width*_bitmap2.Height) > (_bitmap.Width*_bitmap.Height))
     grph.DrawImage(_bitmap,new Rectangle(0,0,_bitmap.Width,_bitmap.Height));
  else
     grph.DrawImage(_bitmap,new Rectangle(0,0,_bitmap2.Width,_bitmap2.Height));
     grph.Dispose();
     _graphic.Dispose();
     _bitmap = new Bitmap(_bitmap2);
     _graphic = Graphics.FromImage(_bitmap);
}

void MainFormResize(object sender, EventArgs e){
  _sbpMessage.Text = string.Format("New size: {0}x{1} pixels",_pnlDraw.Width,_pnlDraw.Height);
  _graphic.Dispose();
  _bitmap = new Bitmap(_bitmap,_pnlDraw.Width,_pnlDraw.Height);
  _graphic = Graphics.FromImage(_bitmap);
}

Soit ces deux codes donnent des résultats hasardeux, soit j'ai mal créé ma méthode de gestion du redessinnement:
void _pnlDrawPaint(object sender, PaintEventArgs e)
        {
            e.Graphics.DrawImage (_bitmap, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
        }

S.V.P, est-ce que quelqu'un pourrait m'aider ?

Merci d'avance

5 réponses

taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
2 janv. 2007 à 04:38
J'ai trouvé par moi même, c'était parce que _pnlDrawPaint() était appellé avant MainFormResize(). ça causait donc un zoom de l'image :(

void _pnlDrawPaint(object sender, PaintEventArgs e)
        {
            if(_bitmap.Size == _pnlDraw.Size)
                e.Graphics.DrawImage (_bitmap, e.ClipRectangle, e.ClipRectangle, GraphicsUnit.Pixel);
        }

Voici le bon code ;)

Enjoy
3
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
31 déc. 2006 à 13:22
Je vais essayer de clarifier:
_pnlDraw est un Panel dans lequel l'utilisateur trace (et voit son dessin)
_bitmap est un Bitmap qui conserve tout ce qui est dans _pnlDraw
_graphic est l'objet Graphics attaché à _bitmap, tout ce qui est tracé dans _pnlDraw est aussi tracé dans _graphic
_sbpMessage est un label dans la status bar qui indique un message d'informations.

Je croyais que ça serait assez facile de trouver l'erreur, pourtant j'ai cherché beaucoup et je n'ai rien trouvé qui améliore les choses; c'est pourquoi je demande la question.

Merci de votre future aide
0
cs_nana21 Messages postés 1 Date d'inscription vendredi 23 février 2007 Statut Membre Dernière intervention 26 février 2007
26 févr. 2007 à 17:53
mon probleme c'est comment je peux redimenssionner la taille d'une image et l'importer dans une application en vb net
et merci pour vous
0
taupe4 Messages postés 91 Date d'inscription dimanche 16 avril 2006 Statut Membre Dernière intervention 17 avril 2008 1
27 févr. 2007 à 13:31
Bien  que cela ne soit pas le bon forum , en VB.net on procède ainsi:
Public Shared Function RedimImage(ByVal source As Bitmap, ByVal nouvelleTaille As Size) As Bitmap
            Dim retour As New Bitmap(nouvelleTaille.Width, nouvelleTaille.Height)
            'On crée un objet bitmap de taille désirée
            Dim retourGraphics As Graphics = Graphics.FromImage(retour)
            'On obtient la surface pour travailler
            'On dessine l'image à partir de 0,0 dans le bitmap; le redimensionnement est automatique
            retourGraphics.DrawImage(source, New Rectangle(New Point(0, 0), nouvelleTaille))
            retourGraphics.Dispose()
            Return retour
        End Function

(ne pas oublier Imports System.Drawing)
 Site de vbfrance
«L'erreur est humaine mais un véritable désastre nécessite un ordinateur.»
«Selon les derniers chiffres, 43 % des statistiques sont fausses»
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
projetf Messages postés 26 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 27 avril 2009
1 mai 2007 à 14:16
slt je cherche a redimmensionner une image dans ma form  a laide de la souris comme un loption Sizable pour la form?
0
Rejoignez-nous