begin process at 2010 02 09 21:47:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > AUTO RESIZE PICTUREBOX, LA PICTUREBOX EN MIEUX :)

AUTO RESIZE PICTUREBOX, LA PICTUREBOX EN MIEUX :)


 Information sur la source

Note :
9,33 / 10 - par 6 personnes
9,33 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Source .NET ( DotNet ) Classé sous :picturebox Niveau :Initié Date de création :28/02/2004 Vu / téléchargé :12 483 / 988

Auteur : Kangoo06

Ecrire un message privé
Site perso
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note

 Description

Un petit composant sympa qui (modéstement !) comble les défauts de l'objet PictureBox du Framework .NET
L'image est redimenssionée pour être affichée (en conservant le rapport hauteur/largeur) à la taille de la PictureBox.
Une option permet de centrer l'image ou non.
Je n'en dis pas plus car le code est commenté.
Ce composant est fait pour être intégré directement dans la boite à outil de votre visual studio afin d'en faciliter l'utilisation ! Un vrai jeu d'enfant !

Le composant est livré avec une application démo !

Source

  • using System;
  • using System.Windows.Forms;
  • using System.Drawing;
  • using System.ComponentModel;
  • namespace AutoResizePictureBox
  • {
  • /// <summary>
  • /// AutoResizePictureBox permet de garder le rapport hauteur/largeur d'une image lorsqu'elle est affichée.
  • /// </summary>
  • public class PictureBoxAR : PictureBox
  • {
  • #region Attributs
  • private int maxBmpHeight;
  • private int maxBmpWidth;
  • private Size imageSize;
  • private int top = 0;
  • private int left = 0;
  • private bool autoChangeMaxSize;
  • private bool centerImage = true;
  • [Category("Property Changed"), Description("Evènement déclenché quand la valeur de la propriété Image est changée sur le composant")]
  • public event EventHandler ImageChanged;
  • #endregion
  • #region Accesseurs
  • [Category("Behavior"), Description("Détermine si le composant doit recalculer la taille de l'image lorsqu'il a été redimmensionné"), DefaultValue(true)]
  • public bool AutoChangeMaxSize
  • {
  • get
  • {
  • return this.autoChangeMaxSize;
  • }
  • set
  • {
  • this.autoChangeMaxSize = value;
  • this.Refresh();
  • }
  • }
  • [Category("Behavior"), Description("Détermine si le composant doit center l'image"), DefaultValue(true)]
  • public bool CenterImage
  • {
  • get
  • {
  • return this.centerImage;
  • }
  • set
  • {
  • this.centerImage = value;
  • this.Refresh();
  • }
  • }
  • public new Image Image
  • {
  • get
  • {
  • return base.Image;
  • }
  • set
  • {
  • base.Image = value;
  • this.ImageChanged(this, new EventArgs());
  • }
  • }
  • #endregion
  • #region Constructeurs
  • /// <summary>
  • /// Créé une nouvelle instance du composant PictureBoxAR (Constructeur utilisé par VS en mode designer)
  • /// </summary>
  • public PictureBoxAR() : base()
  • {
  • this.ImageChanged += new EventHandler(PictureBoxEx_ImageChanged);
  • this.Resize += new EventHandler(PictureBoxAR_Resize);
  • this.autoChangeMaxSize = true;
  • }
  • /// <summary>
  • /// Créé une nouvelle instance du composant PictureBoxAR.
  • /// Lorsque la taille maximum de l'image est précisée, elle ne sera pas recalculée automatiquement en cas de
  • /// redimmenssionement du composant
  • /// </summary>
  • /// <param name="maximumWidth">Précise la largeur maximum de l'image</param>
  • /// <param name="maximumHeight">Précise la hauteur maximum de l'image</param>
  • public PictureBoxAR(int maximumWidth, int maximumHeight) : base()
  • {
  • this.ImageChanged += new EventHandler(PictureBoxEx_ImageChanged);
  • this.maxBmpHeight = maximumHeight;
  • this.maxBmpWidth = maximumWidth;
  • this.autoChangeMaxSize = false;
  • }
  • #endregion
  • #region Méthodes privées
  • private void ComputeSizeAndInitialPosition()
  • {
  • this.ComputeImageSize();
  • this.ComputeInitialPosition();
  • }
  • private void ComputeInitialPosition()
  • {
  • try
  • {
  • if (this.centerImage == false)
  • left = top = 0;
  • else
  • {
  • left = (this.Width - imageSize.Width)/2;
  • top = (this.Height - imageSize.Height)/2;
  • }
  • }
  • catch (Exception)
  • {
  • left = 0;
  • top = 0;
  • }
  • }
  • private void ComputeImageSize()
  • {
  • if (this.Image != null)
  • {
  • if (Image.Height > Image.Width)
  • imageSize = new Size(((Image.Width * maxBmpHeight)/Image.Height), maxBmpHeight);
  • else
  • imageSize = new Size(maxBmpWidth, ((Image.Height * maxBmpWidth)/Image.Width));
  • }
  • else
  • imageSize = Size.Empty;
  • }
  • private void ChangeMaxSize()
  • {
  • if (this.autoChangeMaxSize)
  • {
  • this.maxBmpHeight = this.ClientRectangle.Height;
  • this.maxBmpWidth = this.ClientRectangle.Width;
  • }
  • }
  • #endregion
  • #region Méthodes overridées
  • protected override void OnPaint(PaintEventArgs e)
  • {
  • if (this.Image != null)
  • {
  • Graphics g = e.Graphics;
  • g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
  • g.DrawImage(this.Image, new Rectangle(left, top, imageSize.Width, imageSize.Height),
  • new Rectangle(0, 0, this.Image.Width, this.Image.Height),
  • GraphicsUnit.Pixel);
  • }
  • }
  • public override void Refresh()
  • {
  • this.ChangeMaxSize();
  • this.ComputeSizeAndInitialPosition();
  • base.Refresh();
  • }
  • #endregion
  • #region Events
  • private void PictureBoxEx_ImageChanged(object sender, EventArgs e)
  • {
  • this.ComputeSizeAndInitialPosition();
  • }
  • private void PictureBoxAR_Resize(object sender, EventArgs e)
  • {
  • this.Refresh();
  • }
  • #endregion
  • }
  • }
using System;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;


namespace AutoResizePictureBox
{
	/// <summary>
	/// AutoResizePictureBox permet de garder le rapport hauteur/largeur d'une image lorsqu'elle est affichée.
	/// </summary>
	public class PictureBoxAR : PictureBox
	{
		#region Attributs
		private int maxBmpHeight;
		private int maxBmpWidth;
		private Size imageSize;
		private int top = 0;
		private int left = 0;
		private bool autoChangeMaxSize;
		private bool centerImage = true;
		[Category("Property Changed"), Description("Evènement déclenché quand la valeur de la propriété Image est changée sur le composant")]
		public event EventHandler ImageChanged;
		#endregion

		#region Accesseurs
		[Category("Behavior"), Description("Détermine si le composant doit recalculer la taille de l'image lorsqu'il a été redimmensionné"), DefaultValue(true)]
		public bool AutoChangeMaxSize
		{
			get
			{
				return this.autoChangeMaxSize;
			}
			set
			{
				this.autoChangeMaxSize = value;
				this.Refresh();
			}
		}
		[Category("Behavior"), Description("Détermine si le composant doit center l'image"), DefaultValue(true)]
		public bool CenterImage
		{
			get
			{
				return this.centerImage;
			}
			set
			{
				this.centerImage = value;
				this.Refresh();
			}
		}

		public new Image Image
		{
			get
			{
				return base.Image;
			}
			set
			{
				base.Image = value;
				this.ImageChanged(this, new EventArgs());
			}
		}
		
		#endregion

		#region Constructeurs
		/// <summary>
		/// Créé une nouvelle instance du composant PictureBoxAR (Constructeur utilisé par VS en mode designer)
		/// </summary>
		public PictureBoxAR() : base()
		{
			this.ImageChanged += new EventHandler(PictureBoxEx_ImageChanged);
			this.Resize += new EventHandler(PictureBoxAR_Resize);
			this.autoChangeMaxSize = true;
		}

		/// <summary>
		/// Créé une nouvelle instance du composant PictureBoxAR.
		/// Lorsque la taille maximum de l'image est précisée, elle ne sera pas recalculée automatiquement en cas de
		/// redimmenssionement du composant
		/// </summary>
		/// <param name="maximumWidth">Précise la largeur maximum de l'image</param>
		/// <param name="maximumHeight">Précise la hauteur maximum de l'image</param>
		public PictureBoxAR(int maximumWidth, int maximumHeight) : base()
		{
			this.ImageChanged += new EventHandler(PictureBoxEx_ImageChanged);
			this.maxBmpHeight = maximumHeight;
			this.maxBmpWidth = maximumWidth;
			this.autoChangeMaxSize = false;
		}

		#endregion

		#region Méthodes privées
		private void ComputeSizeAndInitialPosition()
		{
			this.ComputeImageSize();
			this.ComputeInitialPosition();			
		}

		private void ComputeInitialPosition()
		{
			try
			{
				if (this.centerImage == false)
					left = top = 0;
				else
				{
					left = (this.Width - imageSize.Width)/2;
					top  = (this.Height - imageSize.Height)/2;
				}
			}
			catch (Exception)
			{
				left = 0;
				top = 0;
			}
		}

		private void ComputeImageSize()
		{
			if (this.Image != null)
			{
				if (Image.Height > Image.Width) 
					imageSize = new Size(((Image.Width * maxBmpHeight)/Image.Height), maxBmpHeight);
				else
					imageSize = new Size(maxBmpWidth, ((Image.Height * maxBmpWidth)/Image.Width));
			}
			else
				imageSize = Size.Empty;
		}

		private void ChangeMaxSize()
		{
			if (this.autoChangeMaxSize)
			{
				this.maxBmpHeight = this.ClientRectangle.Height;
				this.maxBmpWidth = this.ClientRectangle.Width;
			}
		}
		#endregion

		#region Méthodes overridées
		protected override void OnPaint(PaintEventArgs e)
		{
			if (this.Image != null)
			{
				Graphics g = e.Graphics;
				g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
				g.DrawImage(this.Image, new Rectangle(left, top, imageSize.Width, imageSize.Height),
										new Rectangle(0, 0, this.Image.Width, this.Image.Height),
										GraphicsUnit.Pixel);
			}
		}

		public override void Refresh()
		{
			this.ChangeMaxSize();
			this.ComputeSizeAndInitialPosition();
			base.Refresh();
		}

		#endregion

		#region Events
		private void PictureBoxEx_ImageChanged(object sender, EventArgs e)
		{
			this.ComputeSizeAndInitialPosition();
		}

		private void PictureBoxAR_Resize(object sender, EventArgs e)
		{
			this.Refresh();
		}
		#endregion
	}
}

 Conclusion

Pas grand chose à rajouter...
Je vais publier une nouvelle version dans peu de temps qui offrira un peu plus d'option (le positionnnement de l'image dans la PictureBox, l'utilisation de tel ou tel algorithme d'interpolation, ...) et qui surtout sera optimisée !


Stay tuned :)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source .NET (Dotnet) REGISTRYMANAGER: POUR ACCÉDER TRÈS SIMPLEMENT À LA BASE DE R...
Source avec Zip Source .NET (Dotnet) LES DESIGN PATTERNS - MODÈLE FABRIQUE ABSTRAITE (ABSTRACT FA...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE par olivieram2
Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING par yoannd
Source avec Zip Source avec une capture Source .NET (Dotnet) UITYPEEDITOR HACKING, PROPERTYGRID ET LISTVIEW CONFIGURABLES... par gourky
Source avec Zip Source .NET (Dotnet) CONVERTION D'UNE IMAGE EN G-CODE, GRAVURE CNC par gourky
Source avec Zip Source .NET (Dotnet) CAROUSEL EN WPF (USERCONTROL) par CoolSpirit

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) UNE SINUSOÏDE... EXEMPLE D'UTILISATION DES FONCTIONS GRAPHIQ... par sebmafate
Source avec Zip Source avec une capture Source .NET (Dotnet) ZOOM D'UNE IMAGE AVEC L'AFFICHAGE DE SCROOLBARS LE PLUS SIMP... par Fildomen
Source avec Zip Source .NET (Dotnet) JEU DE MEMOIRE SURCHARGE PICTUREBOX LECTURE ECRITURE ... par fredzool

Commentaires et avis

Commentaire de kuss le 15/03/2004 14:06:40

Tres impatient de voir ce que vas donner cette nouvelle version !!!
Continue a nous gater ....
(Surtout l'algorithme d'interpolation)

Commentaire de kuss le 15/03/2004 14:06:43

Tres impatient de voir ce que vas donner cette nouvelle version !!!
Continue a nous gater ....
(Surtout l'algorithme d'interpolation)

Commentaire de kuss le 15/03/2004 14:06:44

Tres impatient de voir ce que vas donner cette nouvelle version !!!
Continue a nous gater ....
(Surtout l'algorithme d'interpolation)

Commentaire de ousta le 05/07/2004 17:00:10

Terrible ^^

Commentaire de Poppuledaimadoshi le 18/10/2004 14:31:54

Tout simplement génial!!
Bravo pour ce composant fort utile, et très simple à utiliser!
Merci, allez hop 10/10!!

Commentaire de Kangoo06 le 18/10/2004 14:37:50

Merci !!
La nouvelle version c'est pour bientôt ... avec d'autre composant pour gérer les facilement les images, les photos, ... :)

Commentaire de yfbf le 30/05/2005 13:24:25

Merci pour ce composant.
Une petite question :

1/ l' aspect ration ?


Sinon continu c'est super.

Bien à toi,

Commentaire de kakol le 12/07/2005 22:35:45

Merci beaucoup ce code m'a bien aidee pour mon application !
bonne continuation.
kakol

Commentaire de kakol le 29/07/2005 16:21:59

Salut,
Je voudrais juste savoir s'il etait possible d'y rajouter une fonction zoom sur image(avec des scrollbars) ?
J'ai essaye de le faire en rajoutant un panel a la taille de l'image mais je n'arrive pas a redimensionner automatiquement ce panel a la taille de l'image. Je debute donc je ne sais pas trop comment l'integrer.

merci

*** Kakol ***

Commentaire de Kangoo06 le 30/07/2005 14:00:20

Salut, je pense qu'au lieu de rajouter un panel, il vaut mieux directement jouer avec la fonction draw de l'image (redessiner uniquement la partie zoomée) ça doit pas etre super compliqué et ça sera beaucoup plus optimisé.

Si tu t'en sors pas, contacte moi je regarderai ça de plus pres ! @+

Commentaire de kakol le 09/08/2005 17:54:46

salut, le probleme si je redessine uniquement le partie zoomee de l'image c'est que je ne pourrai pas naviguer sur toute l'image une fois zoomee, alors que l'utilisation de scrollbars (que je n'ai malheureusement pas encore reussi a integrer) permettrait de faire cela.
@+
*** Kakol ***

Commentaire de projetf le 03/05/2007 13:20:15

je narrive pas a louvrir....

Commentaire de projetf le 03/05/2007 13:23:07

a nan c bon. mais ct tu fai pour resize limage avc la souri?

Commentaire de Renfield le 03/05/2007 13:44:59 administrateur CS

Merci , projetf de faire un sérieux effort pour rédiger....
tu n'es pas en train d'envoyer un SMS à tes potes !

Renfield - Admin CS

Commentaire de projetf le 03/05/2007 13:50:22

JE CHERCHE A POUVOIR REDIMENSIONNER L'IMAGE CELON MON CHOI CAD AGRANDIR OU DIMINUNIR LA TAILLE DE L'IMAGE ....

Commentaire de manoxide le 30/03/2008 23:35:46 9/10

Bravo pour le composant!

Je peux suggèrer une fonction qui serait grandement agréable ?

Un GetImage qui récupère le Bitmap tel que vue à l'affichage. Donc, une photo redimensionné,  croqué et prêt à être imprimé :)

Cordialement,

Commentaire de micking le 20/08/2009 18:44:51

"(CTRL) Roulette avant-arrière j'adore"

Commentaire de micking le 20/08/2009 18:46:35

(ctrl-maj-z) c'est mieux !

Commentaire de micking le 20/08/2009 18:48:59

je voudrai savoir si je peut faire un auto-resize de l'ensemble de ma page web? si jamais où dois-je me renseigné ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

SOS : objet créé dynamiquement :p [ par EnDSuB ] http://endsub.free.frVoici le problème : - 1. je génère quelque pictureBox dynamiquement.-&gt; je leur ajoute a chaqun un eveneme scrollBar a partir de pictureBox [ par kalakalaboubou ] bonjour a tous!!quelqu'un sait-il comment creer soit-meme sa scrollBar a partir de pictureBox en C# pour Pocket PC.merci d'avance Problème VS.Net (Picturebox ressource exécution) [ par linx20 ] Voila mon ptit probleme la compilation se passe sans warningLors de l'éxécution de ma premiere form et au moment de InitializeComponent, VisualStudio Résolution ecran [ par streetlife ] Voila je créer un Form et une pictureBox dessus.Dans les propiriété du Form je spécifie que la fenetre sera a l'état maximisé dès le lancement de l'ap le HDC d'un picturebox URGENT [ par pirate75000 ] Quelqu'un aurait-il le bout de code qui me permetrais de:En cliquant sur le Button1obtenir le HDC du picturebox1.Merci d'avance je suis vraiment concé PictureBox [ par stiley1 ] Slut, J'aimerai savoir comment on enregistre des fichiers images dans une base de données (des photos scannées). J'ai une base de données sqlserver200 PictureBox en C# [ par stuffy ] Bonjour.voila je cherche quelqu'un qui pourrait m'expliquer comment faire scroller une image BMP avec une scrollbar dans une PictureBox.je ne vois auc Comment dessiner dans une pictureBox ??? [ par mfcnet ] Salut,Je cherche en vain le moyen pour faire du dessin mais seulement dans une fenetre pictureBox, et je n'arrive qu'a dessiné dans le form principale Utulisation du controle pictureBox [ par Matrics ] -Est ce que je peux placé deux images dans un controle pictureBox puis enregistré le resultat de la superposition sur le disque ? Probléme BorderStyle, MouseEnter, MouseLeave dans PictureBox [ par rifi ] Voila, je veux créer un effet 3D chaque fois que mon controle PictureBox reçoit le focus (je modifie le borderstyle en Border3D) seulement lorsque la


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales