Csharp/C Sharp/2D Graphics/Bitmap
Содержание
- 1 Bitmap.HorizontalResolution
- 2 Bitmap property: Height, Physical Dimension, width, raw format and size
- 3 Bitmap.SetResolution
- 4 Bit operation with PixelFormat.Alpha
- 5 Create a Bitmap image in memory and set its CompositingMode
- 6 Create a green color with an alpha component then draw a green rectangle to the bitmap in memory
- 7 Create a red color with an alpha component then draw a red circle to the bitmap in memory
- 8 Create Graphics object From Image
- 9 Create your own BitMap
- 10 Double buffer with Bitmap
- 11 Draw an array of images
- 12 Draw on an Bitmap
- 13 Draw shapes to the bitmap in memory
- 14 new Bitmap(bitmap, size)
- 15 PixelFormat.DontCare
- 16 Read Bitmap Size by using BinaryReader
- 17 Resize the Bitmap using the highest quality interpolation mode
- 18 Resize the Bitmap using the lowest quality interpolation mode
- 19 Use a color matrix to change the color properties of the image
- 20 write the pixel information to the console window
Bitmap.HorizontalResolution
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Bitmap bmp = new Bitmap("rama.jpg"); g.DrawImage(bmp, 0, 0); Console.WriteLine("Screen resolution: " + g.DpiX + "DPI"); Console.WriteLine("Image resolution: " + bmp.HorizontalResolution + "DPI"); Console.WriteLine("Image Width: " + bmp.Width); Console.WriteLine("Image Height: " + bmp.Height); SizeF s = new SizeF(bmp.Width * (g.DpiX / bmp.HorizontalResolution), bmp.Height * (g.DpiY / bmp.VerticalResolution)); Console.WriteLine("Display size of image: " + s); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Bitmap property: Height, Physical Dimension, width, raw format and size
<source lang="csharp"> using System; using System.IO; using System.Drawing;
class MainClass {
static public void Main() { Bitmap img = new Bitmap("winter.jpg"); Console.WriteLine(img.PhysicalDimension.ToString() ); Console.WriteLine(img.Height.ToString() ); Console.WriteLine(img.Width.ToString() ); Console.WriteLine(img.RawFormat.ToString() ); Console.WriteLine(img.Size.ToString() ); }
}
</source>
Bitmap.SetResolution
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Bitmap bmp = new Bitmap("rama.jpg"); g.FillRectangle(Brushes.White, this.ClientRectangle); bmp.SetResolution(600f, 600f); g.DrawImage(bmp, 0, 0); bmp.SetResolution(1200f, 1200f); g.DrawImage(bmp, 180, 0); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Bit operation with PixelFormat.Alpha
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Text; using System.Windows.Forms; public class MainClass {
public static void Main() { // Create two new bitmap images Bitmap bmp1 = new Bitmap(100, 100, PixelFormat.Format32bppArgb); Bitmap bmp2 = new Bitmap(100, 100, PixelFormat.Format24bppRgb); // Test for alpha bool b1 = ((bmp1.PixelFormat & PixelFormat.Alpha) != 0); bool b2 = ((bmp2.PixelFormat & PixelFormat.Alpha) != 0); // Output results to console window Console.WriteLine("bmp1 has alpha?: " + b1); Console.WriteLine("bmp2 has alpha?: " + b2); // Clean up bmp1.Dispose(); bmp2.Dispose(); }
}
</source>
Create a Bitmap image in memory and set its CompositingMode
<source lang="csharp">
using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics gForm = e.Graphics; gForm.FillRectangle(Brushes.White, this.ClientRectangle); for (int i = 1; i <= 7; ++i) { Rectangle r = new Rectangle(i * 40 - 15, 0, 15, this.ClientRectangle.Height); gForm.FillRectangle(Brushes.Orange, r); } Bitmap bmp = new Bitmap(260, 260,System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics gBmp = Graphics.FromImage(bmp); gBmp.rupositingMode = System.Drawing.Drawing2D.rupositingMode.SourceCopy; gForm.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); bmp.Dispose(); gBmp.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Create a green color with an alpha component then draw a green rectangle to the bitmap in memory
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics gForm = e.Graphics; gForm.FillRectangle(Brushes.White, this.ClientRectangle); for (int i = 1; i <= 7; ++i) { Rectangle r = new Rectangle(i * 40 - 15, 0, 15, this.ClientRectangle.Height); gForm.FillRectangle(Brushes.Orange, r); } Bitmap bmp = new Bitmap(260, 260, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics gBmp = Graphics.FromImage(bmp); Color green = Color.FromArgb(0x40, 0, 0xff, 0); Brush greenBrush = new SolidBrush(green); gBmp.FillRectangle(greenBrush, 10, 10, 140, 140); gForm.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); bmp.Dispose(); gBmp.Dispose(); greenBrush.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Create a red color with an alpha component then draw a red circle to the bitmap in memory
<source lang="csharp">
using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics gForm = e.Graphics; gForm.FillRectangle(Brushes.White, this.ClientRectangle); for (int i = 1; i <= 7; ++i) { Rectangle r = new Rectangle(i * 40 - 15, 0, 15,this.ClientRectangle.Height); gForm.FillRectangle(Brushes.Orange, r); } Bitmap bmp = new Bitmap(260, 260,System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics gBmp = Graphics.FromImage(bmp);
Color red = Color.FromArgb(0x60, 0xff, 0, 0); Brush redBrush = new SolidBrush(red); gBmp.FillEllipse(redBrush, 70, 70, 160, 160); gForm.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); bmp.Dispose(); gBmp.Dispose(); redBrush.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Create Graphics object From Image
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms;
class HelloWorldBitmap: Form {
const float fResolution = 300; Bitmap bitmap = new Bitmap(1, 1); public static void Main() { Application.Run(new HelloWorldBitmap()); } public HelloWorldBitmap() { ResizeRedraw = true; bitmap.SetResolution(fResolution, fResolution); Graphics grfx = Graphics.FromImage(bitmap); Font font = new Font("Times New Roman", 72); Size size = grfx.MeasureString(Text, font).ToSize(); bitmap = new Bitmap(bitmap, size); bitmap.SetResolution(fResolution, fResolution); grfx = Graphics.FromImage(bitmap); grfx.Clear(Color.White); grfx.DrawString(Text, font, Brushes.Black, 0, 0); grfx.Dispose(); } protected override void OnPaint(PaintEventArgs pea) { grfx.DrawImage(bitmap, 0, 0); }
}
</source>
Create your own BitMap
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Imaging; public class Form1 : System.Windows.Forms.Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = ""; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Bitmap bmp = new Bitmap(100, 100); Graphics gImage = Graphics.FromImage(bmp); gImage.FillRectangle(Brushes.Red, 0, 0, bmp.Width, bmp.Height); gImage.DrawRectangle(Pens.Black, 10, 10, bmp.Width - 20, bmp.Height - 20); Graphics gScreen = e.Graphics; gScreen.FillRectangle(Brushes.White, this.ClientRectangle); gScreen.DrawImage(bmp, new Rectangle(10, 10, bmp.Width, bmp.Height)); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } }
</source>
Double buffer with Bitmap
<source lang="csharp"> using System; using System.Drawing; using System.Windows.Forms; public class Form1 : Form {
Pen p; SolidBrush b, bT = new SolidBrush(Color.Black); string path = "5.bmp"; Image im; Font f; public Form1() { Color cP = Color.Gray; Color cB = Color.LightGray; p = new Pen(cP, 6); b = new SolidBrush(cB); im = Image.FromFile(path); f = new Font(new FontFamily("Times New Roman"), 10); } static void Main() { Application.Run(new Form1()); } protected override void OnPaint(PaintEventArgs pea) { Sketch(); //SketchDBuf(); } private void Sketch() { Graphics g = Graphics.FromHwnd(this.Handle); g.FillRectangle(b, 4, 4, 260, 220); g.DrawRectangle(p, 4, 4, 260, 220); g.DrawImage(im, 33, 35, 200, 145); g.DrawString("AAAAAA", f, bT, 180, 190); g.Dispose(); } private void SketchDBuf() { int hh = 3, w = 260, h = 220; Graphics g; Bitmap bm = new Bitmap(w + 2 * hh, h + 2 * hh); g = Graphics.FromImage(bm); g.FillRectangle(b, hh, hh, w, h); g.DrawRectangle(new Pen(Color.Gray, 2 * hh), hh, hh, w, h); g.DrawImage(im, hh + 30, hh + 32, 200, 145); g.DrawString("Text", f, bT, 180, 190); g = Graphics.FromHwnd(this.Handle); g.DrawImage(bm, 1, 1); g.Dispose(); }
}
</source>
Draw an array of images
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class MainForm : Form {
private Bitmap[] myImages = new Bitmap[3]; public MainForm() { myImages[0] = new Bitmap("imageA.bmp"); myImages[1] = new Bitmap("imageB.bmp"); myImages[2] = new Bitmap("imageC.bmp"); } protected void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; int yOffset = 10; foreach (Bitmap b in myImages) { g.DrawImage(b, 10, yOffset, 90, 90); yOffset += 100; } } public static void Main() { Application.Run(new MainForm()); }
}
</source>
Draw on an Bitmap
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Bitmap bmp = new Bitmap(100, 100); Graphics gImage = Graphics.FromImage(bmp); gImage.FillRectangle(Brushes.Red, 0, 0, bmp.Width, bmp.Height); gImage.DrawRectangle(Pens.Black, 10, 10, bmp.Width - 20, bmp.Height - 20); Graphics gScreen = e.Graphics; gScreen.FillRectangle(Brushes.White, this.ClientRectangle); gScreen.DrawImage(bmp, new Rectangle(10, 10, bmp.Width, bmp.Height)); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Draw shapes to the bitmap in memory
<source lang="csharp">
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Collections; using System.ruponentModel; using System.Windows.Forms; using System.Data; using System.Drawing.Imaging; public class Form1 : System.Windows.Forms.Form { public Form1() { InitializeComponent(); } private void InitializeComponent() { this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Text = ""; this.Resize += new System.EventHandler(this.Form1_Resize); this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint); } static void Main() { Application.Run(new Form1()); } private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { Graphics gForm = e.Graphics; gForm.FillRectangle(Brushes.White, this.ClientRectangle); // Create a Bitmap image in memory and set its CompositingMode Bitmap bmp = new Bitmap(260, 260, PixelFormat.Format32bppArgb); Graphics gBmp = Graphics.FromImage(bmp); gBmp.rupositingMode = CompositingMode.SourceCopy; // draw a red circle to the bitmap in memory Color red = Color.FromArgb(0x60, 0xff, 0, 0); Brush redBrush = new SolidBrush(red); gBmp.FillEllipse(redBrush, 70, 70, 160, 160); // draw a green rectangle to the bitmap in memory Color green = Color.FromArgb(0x40, 0, 0xff, 0); Brush greenBrush = new SolidBrush(green); gBmp.FillRectangle(greenBrush, 10, 10, 140, 140); // draw the bitmap on our window gForm.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); bmp.Dispose(); gBmp.Dispose(); redBrush.Dispose(); greenBrush.Dispose(); } private void Form1_Resize(object sender, System.EventArgs e) { Invalidate(); } } </source>
new Bitmap(bitmap, size)
<source lang="csharp">
using System; using System.Drawing; using System.Windows.Forms; class HelloWorldBitmap : Form {
const float fResolution = 300; Bitmap bitmap = new Bitmap(1, 1); public static void Main() { Application.Run(new HelloWorldBitmap()); } public HelloWorldBitmap() { Text = "Hello, World!"; ResizeRedraw = true; bitmap.SetResolution(fResolution, fResolution); Graphics grfx = Graphics.FromImage(bitmap); Font font = new Font("Times New Roman", 72); Size size = grfx.MeasureString(Text, font).ToSize(); bitmap = new Bitmap(bitmap, size); bitmap.SetResolution(fResolution, fResolution); grfx = Graphics.FromImage(bitmap); grfx.Clear(Color.White); grfx.DrawString(Text, font, Brushes.Black, 0, 0); grfx.Dispose(); } protected override void OnPaint(PaintEventArgs pea) { pea.Graphics.DrawImage(bitmap, 0, 0); }
}
</source>
PixelFormat.DontCare
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Bitmap bmp = new Bitmap("rama.jpg"); g.FillRectangle(Brushes.White, this.ClientRectangle); Rectangle r = new Rectangle(120, 120, 400, 400); Bitmap bmp2 = bmp.Clone(r, System.Drawing.Imaging.PixelFormat.DontCare); g.DrawImage(bmp, new Rectangle(0, 0, 200, 200)); g.DrawImage(bmp2, new Rectangle(210, 0, 200, 200)); bmp2.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Read Bitmap Size by using BinaryReader
<source lang="csharp">
using System; using System.IO;
class Class1 {
static void Main(string[] args) { string[] cma = Environment.GetCommandLineArgs(); if (cma.GetUpperBound(0) >= 1) { FileStream myFStream = new FileStream(cma[1], FileMode.Open, FileAccess.Read); BinaryReader binRead = new BinaryReader(myFStream); binRead.BaseStream.Position = 0x12; Console.WriteLine(binRead.ReadInt32()); Console.WriteLine(binRead.ReadInt32()); Console.WriteLine(binRead.ReadInt16()); Console.WriteLine(binRead.ReadInt16()); binRead.Close(); myFStream.Close(); } }
}
</source>
Resize the Bitmap using the highest quality interpolation mode
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Bitmap bmp = new Bitmap("rama.jpg"); g.FillRectangle(Brushes.White, this.ClientRectangle); int width = bmp.Width; int height = bmp.Height; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage( bmp, new Rectangle(130, 10, 120, 120), // source rectangle new Rectangle(0, 0, width, height), // destination rectangle GraphicsUnit.Pixel); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Resize the Bitmap using the lowest quality interpolation mode
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics g = e.Graphics; Bitmap bmp = new Bitmap("rama.jpg"); g.FillRectangle(Brushes.White, this.ClientRectangle); int width = bmp.Width; int height = bmp.Height; g.InterpolationMode = InterpolationMode.NearestNeighbor; g.DrawImage( bmp, new Rectangle(10, 10, 120, 120), // source rectangle new Rectangle(0, 0, width, height), // destination rectangle GraphicsUnit.Pixel); } public static void Main() { Application.Run(new Form1()); }
}
</source>
Use a color matrix to change the color properties of the image
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Text; using System.Drawing.Printing; using System.Drawing.Drawing2D; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Bitmap bmp = new Bitmap("alphabet.gif"); Graphics g = e.Graphics; float[][] matrixItems = { new float[] {0.2f, 0, 0, 0, 0}, new float[] {0, 0.8f, 0, 0, 0}, new float[] {0, 0, 1, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {0, 0, 0, 0, 1}}; ColorMatrix colorMatrix = new ColorMatrix(matrixItems); ImageAttributes imageAtt = new ImageAttributes(); imageAtt.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap); TextureBrush tb = new TextureBrush(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height), imageAtt); tb.WrapMode = WrapMode.Tile; g.FillRectangle(tb, this.ClientRectangle); bmp.Dispose(); tb.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>
write the pixel information to the console window
<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; public class Form1 : Form {
protected override void OnPaint(PaintEventArgs e) { Graphics gForm = e.Graphics; gForm.FillRectangle(Brushes.White, this.ClientRectangle); Bitmap bmp = new Bitmap(6, 6); Graphics gBmp = Graphics.FromImage(bmp); gBmp.FillRectangle(Brushes.White, 0, 0, bmp.Width, bmp.Height); gBmp.DrawLine(Pens.Red, 0, 0, 5, 5); gForm.DrawImage(bmp, 20, 20, bmp.Width, bmp.Height); for (int y = 0; y < bmp.Height; ++y) { for (int x = 0; x < bmp.Width; ++x) { Color c = bmp.GetPixel(x, y); Console.Write("{0,2:x}{1,2:x}{2,2:x}{3,2:x} ",c.A, c.R, c.G, c.G); } Console.WriteLine(); } bmp.Dispose(); } public static void Main() { Application.Run(new Form1()); }
}
</source>