Comment redimensionner une image sans agrandir son contenu [Résolu]

taupe4 94 Messages postés dimanche 16 avril 2006Date d'inscription 17 avril 2008 Dernière intervention - 29 déc. 2006 à 23:25 - Dernière réponse : projetf 26 Messages postés dimanche 15 avril 2007Date d'inscription 27 avril 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
taupe4 94 Messages postés dimanche 16 avril 2006Date d'inscription 17 avril 2008 Dernière intervention - 2 janv. 2007 à 04:38
3
Merci
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

Merci taupe4 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de taupe4
taupe4 94 Messages postés dimanche 16 avril 2006Date d'inscription 17 avril 2008 Dernière intervention - 31 déc. 2006 à 13:22
0
Merci
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
Commenter la réponse de taupe4
cs_nana21 1 Messages postés vendredi 23 février 2007Date d'inscription 26 février 2007 Dernière intervention - 26 févr. 2007 à 17:53
0
Merci
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
Commenter la réponse de cs_nana21
taupe4 94 Messages postés dimanche 16 avril 2006Date d'inscription 17 avril 2008 Dernière intervention - 27 févr. 2007 à 13:31
0
Merci
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»
Commenter la réponse de taupe4
projetf 26 Messages postés dimanche 15 avril 2007Date d'inscription 27 avril 2009 Dernière intervention - 1 mai 2007 à 14:16
0
Merci
slt je cherche a redimmensionner une image dans ma form  a laide de la souris comme un loption Sizable pour la form?
Commenter la réponse de projetf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.