vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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és1Date d'inscriptionlundi 19 novembre 2007StatutMembreDernière intervention25 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és5Date d'inscriptionmercredi 13 juillet 2005StatutMembreDerniè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és3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 20 févr. 2008 à 17:55
csarlin
Messages postés4Date d'inscriptionlundi 18 février 2008StatutMembreDernière intervention25 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és138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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és138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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és3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 4 févr. 2008 à 09:25
Ca ne marche pas car "base.OnPaint( e );" est toujours en commentaire.
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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és6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 3 févr. 2008 à 01:13
Salut,
Mais pourquoi personne n'aime ControlPaint.DrawReversibleFrame ? :-)
vboussema
Messages postés138Date d'inscriptionmercredi 1 février 2006StatutMembreDerniè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és3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 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 !?
26 févr. 2009 à 11:46
{
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
25 févr. 2009 à 17:22
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
4 juin 2008 à 19:29
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
20 févr. 2008 à 17:55
20 févr. 2008 à 15:31
4 févr. 2008 à 17:10
points extrèmes de l'image en mode zoome
;)
4 févr. 2008 à 09:45
elle marche maintenant ;)
4 févr. 2008 à 09:25
3 févr. 2008 à 07:38
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.
3 févr. 2008 à 01:13
Mais pourquoi personne n'aime ControlPaint.DrawReversibleFrame ? :-)
2 févr. 2008 à 21:53
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
2 févr. 2008 à 18:34