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 }