PETITE CLASSE POUR DESSINER UN RECTANGLE DE SELECTION DANS UN PICTUREBOX

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 2 févr. 2008 à 18:34
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009 - 26 févr. 2009 à 11:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45605-petite-classe-pour-dessiner-un-rectangle-de-selection-dans-un-picturebox

vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
26 févr. 2009 à 11:46
public static Image Crop(Image image, Rectangle selection)
{
Bitmap bmp = image as Bitmap;

// Check if it is a bitmap:
if (bmp == null)
throw new ArgumentException("No valid bitmap");

// Crop the image:
Bitmap cropBmp = bmp.Clone(selection, bmp.PixelFormat);

// Release the resources:
image.Dispose();

return cropBmp;
}

cette méthode peut t'aider(http://www.codeproject.com/KB/graphics/CroppingImages.aspx)
il suffit de l'appliquer avec :
picturebox.image=crop(picturebox.image,rect);
et c'est tout :)
donc il suffit de faire clone sur l'image a partir du rectangle de sélection
cs_AP08 Messages postés 1 Date d'inscription lundi 19 novembre 2007 Statut Membre Dernière intervention 25 février 2009
25 févr. 2009 à 17:22
Bonjour , merci pour ce jolie petit projet qui ma bien servi , mais j'ai encore un petiti problème je sui sdébutant en C# et j'aimerai introduire à la form principale un bouton qui permettra de changer l'image cad

ON selectionne la zone (le rectangle en pointié)
On clique sur le bouton
et la picturebox ici :dash1.Image = l'interieur de la zone sélectionné

Mais je cale je ne sais pas comment récuperer ce qu'il y a dans le rectangle selectionné

Est ce que quelqu'un aurait une idée ça serai super aimable... !

Merci d'avance

Alex
kgb1917 Messages postés 5 Date d'inscription mercredi 13 juillet 2005 Statut Membre Dernière intervention 4 juin 2008
4 juin 2008 à 19:29
Bonjour,

J’aimerai votre aide sur le point suivant. J’ai suivi le conseil de Lutinore pour passer le code en vb mais j’ai le pb suivant :
Quand je dessine un rectangle vers la droite et le bas, si la souris dépasse le contrôle, les pointillés du rectangle ne "s’arrêtent" pas aux limites du contrôle (que ce soit à droite ou à gauche). ça fonctionne sans problème pour les bords haut et gauche du contrôle.

Je ne parviens pas à résoudre le pb sous vb alors qu’en c#, ça fonctionne très bien (Merci à vboussema).

Pourriez-vous m’aider (1 journée et demie que je suis dessus…) ?

Merci d’avance
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
20 févr. 2008 à 17:55
Colle le code du fichier Dash.cs là : http://tools.codes-sources.com/DotNetCodeConverter.aspx , ça devrait donner quelque chose qui ressemble à du VB.NET
csarlin Messages postés 4 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 25 février 2008
20 févr. 2008 à 15:31
Alors moi je recherche EXACTEMENT la même chose, mais sous vb... Quelqu'un peut m'aider ?
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
4 févr. 2008 à 17:10
on ajoute cette méthode pour savoir les coordonnées des
points extrèmes de l'image en mode zoome
     

   /// <summary>
        /// donne les paramètres pour la position de l'image ;)
        /// </summary>
        /// PictureBox qui contient l'image

       
        public void OffsetOfImage(PictureBox pbox)
        {
            // Calculer les taux d'étirement/compression de l'image
            float xRatio = 1F;
            float yRatio = 1F;
        
            if (pbox.SizeMode == PictureBoxSizeMode.Zoom)
            {
                float a = (float)pbox.Height / (float)pbox.Image.Height;
                float b = (float)pbox.Width / (float)pbox.Image.Width;
                xRatio = Math.Min(a, b);
                yRatio = xRatio;
            }
            //// Calculer la taille de l'image affichée
             Size imgs = new Size((int)(pbox.Image.Width * xRatio), (int)(pbox.Image.Height * yRatio));
//calculer les différances entre l'image et le picturebox
           int diffx = (int)((pbox.Width - pbox.Image.Width * xRatio) / 2);
            int diffy = (int)((pbox.Height - pbox.Image.Height * yRatio) / 2);
           
           //min est le point minimum le plus haut à gauche de l'image
            min.X = diffx;
            min.Y = diffy;
//max est le point le plus bax à droite de l'image
            max.X = (int)(diffx + imgs.Width);
            max.Y = (int)(diffy + imgs.Height);
            
        }
 


;)
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
4 févr. 2008 à 09:45
c'est bon j'ai modifié la source
elle marche maintenant ;)
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
4 févr. 2008 à 09:25
Ca ne marche pas car "base.OnPaint( e );" est toujours en commentaire.
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
3 févr. 2008 à 07:38
bon coq pour drawReversibleFrame son inconvignant c que lorsqu'on dessine le rectangle de sélection il s'affiche sur l'écran donc s'il y a un control au dessus du pictureBox il va etre affecté par le rectangle de sélection et pas le pic en plus ce problème est plus grave si on veut rendre le rectangle persistant(ne pas l'éffacer dans le onMouseUp)
sinon c plus simple ;)
bien sure pour que le rectangle de sélection ne dépasse pas les limites du picturebox il faut bien gérer les rectangles.
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 févr. 2008 à 01:13
Salut,

Mais pourquoi personne n'aime ControlPaint.DrawReversibleFrame ? :-)
vboussema Messages postés 138 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 1 septembre 2009
2 févr. 2008 à 21:53
merci Lutinore pour ton commentaire
pour mon controle je veut que la selection soit visible
peut etre oui j'ai fait base.OnPaint( e ); en commantaire par faute :( mais j'ai corrigé sa en principe ;)
sinon c bon la source???
ah j'ai oublié quand je passe on mode zoome il y a une faute car la dimention de l'image affiché n'est pas celle du pictureBox donc il faut a priori calculer les vrai dimentions de l'image j'ai pas resolus ce problème jusqu'a maintenant si tu as une idée merci
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
2 févr. 2008 à 18:34
Merci mais là il me semble que le code est incomplet, tu n'aurais pas oublié de dessiner l'image sous la sélection !?
Rejoignez-nous