Histogram.cs

Description du code

Histogram.cs est un fichier du projet PhotoBrol.
Ce fichier est situé dans /var/www/bin/sniplets/bibliobrol/photobrol/.

Projet PhotoBrol :

Editeur d'images en CSharp.

Code source ou contenu du fichier

  1. using System;
  2. using System.Collections;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Windows.Forms;
  7.  
  8. namespace be.gaudry.photobrol.view.controls.histogram
  9. {
  10. public class Histogram : Control
  11. {
  12. #region declarations and constructors
  13. private Color color;
  14. private int width;
  15. private int height;
  16. private bool log;
  17.  
  18. private int[] values;
  19. private int max;
  20. private double maxLog;
  21. private bool allowSelection;
  22.  
  23. private Pen blackPen;
  24. private Pen whitePen;
  25. private Pen drawPen;
  26. private bool tracking;
  27. private bool over;
  28. private int start, stop;
  29.  
  30. // events
  31. public delegate void HistogramEventHandler(object sender, HistogramEventArgs e);
  32. public event HistogramEventHandler PositionChanged;
  33. public event HistogramEventHandler SelectionChanged;
  34.  
  35. public Histogram()
  36. {
  37. color = Color.Black;
  38. width = 256;
  39. height = 150;
  40.  
  41. log = true;
  42. blackPen = new Pen(Color.Black, 1);
  43. whitePen = new Pen(Color.White, 1);
  44. drawPen = new Pen(Color.Black);
  45.  
  46. tracking = false;
  47. over = false;
  48.  
  49. InitializeComponent();
  50. SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw |
  51. ControlStyles.DoubleBuffer | ControlStyles.UserPaint, true);
  52. }
  53. #endregion
  54.  
  55. #region properties
  56. // Color property
  57. [DefaultValue(typeof(Color), "Black")]
  58. public Color Color
  59. {
  60. get { return color; }
  61. set
  62. {
  63. color = value;
  64.  
  65. drawPen.Dispose();
  66. drawPen = new Pen(color);
  67. Invalidate();
  68. }
  69. }
  70. // Width property
  71. [DefaultValue(256)]
  72. public int HistogramWidth
  73. {
  74. get { return width; }
  75. set
  76. {
  77. width = value;
  78. Invalidate();
  79. }
  80. }
  81. // Height property
  82. [DefaultValue(150)]
  83. public int HistogramHeight
  84. {
  85. get { return height; }
  86. set
  87. {
  88. height = value;
  89. Invalidate();
  90. }
  91. }
  92. // Allow selection property
  93. [DefaultValue(false)]
  94. public bool AllowSelection
  95. {
  96. get { return allowSelection; }
  97. set { allowSelection = value; }
  98. }
  99. // LogView property
  100. [DefaultValue(false)]
  101. public bool LogView
  102. {
  103. get { return log; }
  104. set
  105. {
  106. log = value;
  107. Invalidate();
  108. }
  109. }
  110.  
  111.  
  112. // Values property
  113. [Browsable(false)]
  114. public int[] Values
  115. {
  116. set
  117. {
  118. values = value;
  119.  
  120. if (values != null)
  121. {
  122. // get the max
  123. max = 0;
  124. foreach (int v in values)
  125. {
  126. if (v > max)
  127. {
  128. max = v;
  129. maxLog = Math.Log10(max);
  130. }
  131. }
  132. }
  133. Invalidate();
  134. }
  135. }
  136. #endregion
  137.  
  138. // Dispose
  139. protected override void Dispose( bool disposing )
  140. {
  141. if ( disposing )
  142. {
  143. blackPen.Dispose( );
  144. whitePen.Dispose( );
  145. drawPen.Dispose( );
  146. }
  147. base.Dispose( disposing );
  148. }
  149.  
  150. // Init component
  151. private void InitializeComponent( )
  152. {
  153. //
  154. // Histogram
  155. //
  156. this.MouseUp += new System.Windows.Forms.MouseEventHandler( this.Histogram_MouseUp );
  157. this.MouseMove += new System.Windows.Forms.MouseEventHandler( this.Histogram_MouseMove );
  158. this.MouseLeave += new System.EventHandler( this.Histogram_MouseLeave );
  159. this.MouseDown += new System.Windows.Forms.MouseEventHandler( this.Histogram_MouseDown );
  160.  
  161. }
  162.  
  163. // Paint control
  164. protected override void OnPaint( PaintEventArgs pe )
  165. {
  166. Graphics g = pe.Graphics;
  167. int x = ( ClientRectangle.Right - width ) / 2;
  168. int y = 5;
  169. int l;
  170.  
  171. // draw rectangle around the image
  172. g.DrawRectangle( blackPen, x - 1, y - 1, width + 1, height + 1 );
  173.  
  174. if ( values != null )
  175. {
  176. int count = Math.Min( values.Length, width );
  177. int start = Math.Min( this.start, this.stop );
  178. int stop = Math.Max( this.start, this.stop );
  179.  
  180. if ( tracking )
  181. {
  182. // fill region of selection
  183. Brush brush = new SolidBrush( Color.FromArgb( 92, 92, 92 ) );
  184. g.FillRectangle( brush, x + start, y, Math.Abs( start - stop ), height );
  185. brush.Dispose( );
  186. }
  187.  
  188. // draw histogram
  189. for ( int i = 0; i < count; i++ )
  190. {
  191. if ( log )
  192. {
  193. l = ( values[i] == 0 ) ? 0 : (int) ( Math.Log10( values[i] ) * height / maxLog );
  194. }
  195. else
  196. {
  197. l = (int) ( values[i] * height / max );
  198. }
  199.  
  200. if ( l != 0 )
  201. {
  202. g.DrawLine( ( ( tracking ) && ( i >= start ) && ( i <= stop ) ) ? whitePen : drawPen,
  203. new Point( x + i, y + height - 1 ),
  204. new Point( x + i, y + height - l )
  205. );
  206. }
  207. }
  208. }
  209.  
  210. // Calling the base class OnPaint
  211. base.OnPaint( pe );
  212. }
  213.  
  214. // On mouse down
  215. private void Histogram_MouseDown( object sender, System.Windows.Forms.MouseEventArgs e )
  216. {
  217. if ( ( allowSelection ) && ( values != null ) )
  218. {
  219. int x = ( ClientRectangle.Right - width ) / 2;
  220. int y = 5;
  221.  
  222. if ( ( e.X >= x ) && ( e.Y >= y ) && ( e.X < x + width ) && ( e.Y < y + height ) )
  223. {
  224. // start selection
  225. tracking = true;
  226. start = e.X - x;
  227. this.Capture = true;
  228. }
  229. }
  230. }
  231.  
  232. // On mouse up
  233. private void Histogram_MouseUp( object sender, System.Windows.Forms.MouseEventArgs e )
  234. {
  235. if ( tracking )
  236. {
  237. // stop selection
  238. tracking = false;
  239. this.Capture = false;
  240. Invalidate( );
  241. }
  242. }
  243.  
  244. // On mouse move
  245. private void Histogram_MouseMove( object sender, System.Windows.Forms.MouseEventArgs e )
  246. {
  247. if ( ( allowSelection ) && ( values != null ) )
  248. {
  249. int x = ( ClientRectangle.Right - width ) / 2;
  250. int y = 5;
  251.  
  252. if ( !tracking )
  253. {
  254. if ( ( e.X >= x ) && ( e.Y >= y ) && ( e.X < x + width ) && ( e.Y < y + height ) )
  255. {
  256. over = true;
  257.  
  258. // moving over
  259. this.Cursor = Cursors.Cross;
  260.  
  261. // notify parent
  262. if ( PositionChanged != null )
  263. PositionChanged( this, new HistogramEventArgs( e.X - x ) );
  264. }
  265. else
  266. {
  267. this.Cursor = Cursors.Default;
  268.  
  269. if ( over )
  270. {
  271. over = false;
  272.  
  273. // notify parent
  274. if ( PositionChanged != null )
  275. PositionChanged( this, new HistogramEventArgs( -1 ) );
  276. }
  277. }
  278. }
  279. else
  280. {
  281. // selecting region
  282. stop = e.X - x;
  283.  
  284. stop = Math.Min( stop, 255 );
  285. stop = Math.Max( stop, 0 );
  286.  
  287. Invalidate( );
  288.  
  289. // notify parent
  290. if ( SelectionChanged != null )
  291. SelectionChanged( this, new HistogramEventArgs( Math.Min( start, stop ), Math.Max( start, stop ) ) );
  292. }
  293. }
  294. }
  295.  
  296. // On mouse leave
  297. private void Histogram_MouseLeave( object sender, System.EventArgs e )
  298. {
  299. if ( ( allowSelection ) && ( values != null ) && ( !tracking ) )
  300. {
  301. // notify parent
  302. if ( PositionChanged != null )
  303. PositionChanged( this, new HistogramEventArgs( -1 ) );
  304. }
  305. }
  306. }
  307. }

Structure et Fichiers du projet

Afficher/masquer...


Répertoires contenus dans /var/www/bin/sniplets/bibliobrol/photobrol/view/controls/histogram/ 
IcôneNomTailleModification
Pas de sous-répertoires.
IcôneNomTailleModification
| _ Répertoire parent0 octets1732317679 23/11/2024 00:21:19
Fichiers contenus dans /var/www/bin/sniplets/bibliobrol/photobrol/view/controls/histogram/ 
IcôneNomTailleModificationAction
IcôneNomTailleModificationAction
Afficher le fichier .cs|.csHistogram.cs9.31 Ko31/10/2018 18:33:16-refusé-
Afficher le fichier .resx|.resxHistogram.resx5.37 Ko31/10/2018 18:33:16-refusé-
Afficher le fichier .cs|.csHistogramEventArgs.cs805 octets31/10/2018 18:33:16-refusé-

Utilisation de l'explorateur de code

  • Navigation :
    • Un clic sur une icône de répertoire ouvre ce répertoire pour en afficher les fichiers.
    • Lorsque le répertoire en cours ne contient pas de sous-répertoires il est possible de remonter vers le répertoire parent.
    • La structure de répertoires en treetable (tableau en forme d'arborescence) n'est plus possibledans cette version.
    • Un clic sur une icône de fichier ouvre ce fichier pour en afficher le code avec la coloration syntaxique adaptée en fonction du langage principal utilisé dans le fichier.
  • Affichage :
    • Il est possible de trier les répertoires ou les fichiers selon certains critères (nom, taille, date).
  • Actions :
    • Les actions possible sur les fichiers dépendent de vos droits d'utilisateur sur le site. Veuillez activer le mode utilisateur pour activer les actions.

Version en cache

23/11/2024 00:21:19 Cette version de la page est en cache (à la date du 23/11/2024 00:21:19) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.

Document créé le 30/10/2009, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/cs-photobrol-source-rf-view/controls/histogram//Histogram.cs.html

L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.