1 /** DGui project file.
2 
3 Copyright: Trogu Antonio Davide 2011-2013
4 
5 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 
7 Authors: Trogu Antonio Davide
8 */
9 module rawbitmap;
10 
11 import dgui.all;
12 
13 class MainForm: Form
14 {
15 	private PictureBox _pict;
16 	private Bitmap _orgBmp;
17 	private Bitmap _bmp;
18 
19 	public this()
20 	{
21 		this._orgBmp = Bitmap.fromFile("image.bmp"); //Load the bitmap from file (this is the original)
22 		this._bmp = Bitmap.fromFile("image.bmp"); //Load the bitmap from file (this one will be modified)
23 
24 		this.text = "DGui Events";
25 		this.size = Size(300, 250);
26 		this.startPosition = FormStartPosition.centerScreen; // Set Form Position
27 
28 		this._pict = new PictureBox();
29 		this._pict.sizeMode = SizeMode.autoSize; // Stretch the image
30 		this._pict.dock = DockStyle.fill; // Fill the whole form area
31 		this._pict.image = this._bmp;
32 		this._pict.parent = this;
33 
34 		this.menu = new MenuBar();
35 		MenuItem mi = this.menu.addItem("Bitmap");
36 
37 		MenuItem mOrgColors = mi.addItem("Original Colors");
38 		MenuItem mInvColors = mi.addItem("Invert Colors");
39 		MenuItem mGsColors = mi.addItem("Gray Scale");
40 
41 		mOrgColors.click.attach(&this.onMenuOrgColorsClick);
42 		mInvColors.click.attach(&this.onMenuInvColorsClick);
43 		mGsColors.click.attach(&this.onMenuGsColorsClick);
44 	}
45 
46 	private void onMenuOrgColorsClick(MenuItem sender, EventArgs e)
47 	{
48 		BitmapData bd;
49 		this._orgBmp.getData(bd); //Get the original data
50 		this._bmp.setData(bd); //Set the original bitmap data
51 		this._pict.invalidate(); // Tell at the PictureBox to redraw itself
52 	}
53 
54 	private void onMenuInvColorsClick(MenuItem sender, EventArgs e)
55 	{
56 		BitmapData bd;
57 		this._bmp.getData(bd); //Get the original data
58 
59 		for(int i = 0; i < bd.bitsCount; i++) // Invert Colors!
60 		{
61 			bd.bits[i].rgbRed = ~bd.bits[i].rgbRed;
62 			bd.bits[i].rgbGreen = ~bd.bits[i].rgbGreen;
63 			bd.bits[i].rgbBlue = ~bd.bits[i].rgbBlue;
64 		}
65 
66 		this._bmp.setData(bd); //Set the original bitmap data
67 		this._pict.invalidate(); // Tell at the PictureBox to redraw itself
68 	}
69 
70 	private void onMenuGsColorsClick(MenuItem sender, EventArgs e)
71 	{
72 		BitmapData bd;
73 		this._bmp.getData(bd); //Get the original data
74 
75 		for(int i = 0; i < bd.bitsCount; i++) // Gray Scale!
76 		{
77 			ubyte mid = cast(ubyte)((bd.bits[i].rgbRed + bd.bits[i].rgbGreen + bd.bits[i].rgbBlue) / 3);
78 
79 			bd.bits[i].rgbRed = mid;
80 			bd.bits[i].rgbGreen = mid;
81 			bd.bits[i].rgbBlue = mid;
82 		}
83 
84 		this._bmp.setData(bd); //Set the original bitmap data
85 		this._pict.invalidate(); // Tell at the PictureBox to redraw itself
86 	}
87 }
88 
89 int main(string[] args)
90 {
91 	return Application.run(new MainForm()); // Start the application
92 }