Index: Form1.cs =================================================================== --- Form1.cs (revision 81403) +++ Form1.cs (working copy) @@ -117,10 +117,13 @@ strm.WriteByte(0); strm.WriteByte(0); + byte[] buffer = BitConverter.GetBytes((UInt16)47); + strm.Write(buffer, 0, buffer.Length); // write the format version. + string FontName = (string)FontComboBox.SelectedItem; - byte[] buffer = ASCIIEncoding.ASCII.GetBytes(FontName); + buffer = ASCIIEncoding.ASCII.GetBytes(FontName); int i = 256 - buffer.Length; if (i < 0) { @@ -150,13 +153,13 @@ charKeyMap = null; Font f = new Font(FontName, 128, GraphicsUnit.Pixel); - UInt64 charsToWrite = (ulong)chars.Count * 16; + UInt64 charsToWrite = (ulong)chars.Count /** 16*/; buffer = BitConverter.GetBytes(charsToWrite); strm.Write(buffer, 0, buffer.Length); // Write the number of chars to read. int prevChar = 0; - for (byte style = 0; style < 16; style++) + for (byte style = 0; style < 1 /*16*/; style++) { f = new Font(FontName, 64, (FontStyle)style, GraphicsUnit.Pixel); foreach (int ch in chars) @@ -229,31 +232,71 @@ private byte[] ConvertToByteArray(Bitmap b) { - bool[] bits = new bool[b.Height * b.Width]; + bool[] pbits = new bool[b.Height * b.Width * 10]; int bitnum = 0; + Color White = Color.FromArgb(0, 0, 0); Color Black = Color.FromArgb(255, 255, 255); + Color curPix; for (int x = 0; x < b.Width; x++) { for (int y = 0; y < b.Height; y++) { - if (b.GetPixel(x, y) == Black) + curPix = b.GetPixel(x,y); + if (curPix != White) { - bits[bitnum] = false; + if (curPix == Black) + { + pbits[bitnum] = false; + bitnum++; + pbits[bitnum] = false; + bitnum++; + } + else // Write that it's a greyscale pixel, and it's value. + { + pbits[bitnum] = false; + bitnum++; + pbits[bitnum] = true; + bitnum++; + bool[] dat = ConvertByteToBoolArray(GetGreyscaleByte(curPix)); + pbits[bitnum] = dat[0]; + bitnum++; + pbits[bitnum] = dat[1]; + bitnum++; + pbits[bitnum] = dat[2]; + bitnum++; + pbits[bitnum] = dat[3]; + bitnum++; + pbits[bitnum] = dat[4]; + bitnum++; + pbits[bitnum] = dat[5]; + bitnum++; + pbits[bitnum] = dat[6]; + bitnum++; + pbits[bitnum] = dat[7]; + bitnum++; + } } else { - bits[bitnum] = true; + pbits[bitnum] = true; + bitnum++; } - bitnum++; } } - int bytes = (Int32)Math.Ceiling((double)((b.Width * b.Height) / 8)); - byte[] arr2 = new byte[bytes]; - int bitIndex = 0, byteIndex = 0; + bool[] bits = new bool[bitnum]; + Array.Copy(pbits, bits, bitnum); + + int bytes = (Int32)Math.Ceiling((double)(bitnum / 8)); + byte[] arr2 = new byte[bytes + 4]; + byte[] tmp = BitConverter.GetBytes((UInt32)bitnum); + Array.Copy(tmp, arr2, 4); + int bitIndex = 0, byteIndex = 4; for (int i = 0; i < bits.Length; i++) { if (bits[i]) { + //arr2[byteIndex] += 1; + //arr2[byteIndex] <<= 1; arr2[byteIndex] |= (byte)(((byte)1) << bitIndex); } bitIndex++; @@ -267,40 +310,92 @@ return arr2; } + private byte GetGreyscaleByte(Color c) + { + return (byte)((0.2125 * c.R) + (0.7154 * c.G) + (0.0721 * c.B)); + } + + private bool[] ConvertByteToBoolArray(byte b) + { + bool[] r = new bool[8]; + + if ((b & 1) == 1) + { + r[0] = true; + } + if ((b & 2) == 2) + { + r[1] = true; + } + if ((b & 4) == 4) + { + r[2] = true; + } + if ((b & 8) == 8) + { + r[3] = true; + } + if ((b & 16) == 16) + { + r[4] = true; + } + if ((b & 32) == 32) + { + r[5] = true; + } + if ((b & 64) == 64) + { + r[6] = true; + } + if ((b & 128) == 128) + { + r[7] = true; + } + + return r; + } + private void FontComboBox_KeyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } + private static Orvid.Graphics.FontSupport.OPFF opfFont = null; + private void button1_Click(object sender, EventArgs e) { - FileStream str = new FileStream("AgencyFB.opff", FileMode.Open); - byte[] data = new byte[str.Length]; - str.Read(data, 0, (int)str.Length); - Orvid.Graphics.FontSupport.OPFF f = new Orvid.Graphics.FontSupport.OPFF(data); - data = null; - str.Close(); - str.Dispose(); - Orvid.Graphics.Image i = f.GetCharacter(Int32.Parse(textBox2.Text), Orvid.Graphics.FontSupport.FontFlag.Normal); - //i.AntiAlias(); - //i.HalveSize(); - i.HalveSize(); + if (opfFont == null) + { + FileStream str = new FileStream("Chiller.opff", FileMode.Open); + byte[] data = new byte[str.Length]; + str.Read(data, 0, (int)str.Length); + opfFont = new Orvid.Graphics.FontSupport.OPFF(data); + data = null; + str.Close(); + str.Dispose(); + } + Orvid.Graphics.Image i = opfFont.GetCharacter(Int32.Parse(textBox2.Text), Orvid.Graphics.FontSupport.FontFlag.Normal); + //i = Orvid.Graphics.ImageManipulator.Resize(i, new Orvid.Graphics.Vec2(i.Width * 4, i.Height * 4)); + //o.AntiAlias(); + //o.HalveSize(); + //o.HalveSize(); Bitmap b = new Bitmap(i.Width, i.Height); for (uint x = 0; x < i.Width; x++) { for (uint y = 0; y < i.Height; y++) { - //if (i.GetPixel(x, y) == null) + //if (o.GetPixel(x, y) == null) // throw new Exception(); b.SetPixel((int)x, (int)y, i.GetPixel(x, y)); } } pictureBox1.Image = b; pictureBox1.Size = new Size(i.Width, i.Height); - f = null; + pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; + pictureBox1.BringToFront(); System.GC.Collect(); - Font f2 = new Font("Agency FB", 32, (FontStyle)0, GraphicsUnit.Pixel); + Font f2 = new Font("Chiller", 64, (FontStyle)0, GraphicsUnit.Pixel); Bitmap Backend = new Bitmap(i.Width, i.Height); Graphics g = Graphics.FromImage(Backend); g.Clear(Color.White); @@ -323,5 +418,180 @@ { e.Handled = true; } + + + bool thso = false; + bool t2 = false; + bool t3 = false; + private void TestButton2_Click(object sender, EventArgs e) + { + //Bitmap b = (Bitmap)Bitmap.FromFile(Path.GetFullPath("IMGP4154.JPG")); + //FileStream s = new FileStream(Path.GetFullPath("test2.oif"), FileMode.OpenOrCreate); + //Orvid.Graphics.Image i = new Orvid.Graphics.Image(b.Width, b.Height); + //for (uint x = 0; x < i.Width; x++) + //{ + // for (uint y = 0; y < i.Height; y++) + // { + // i.SetPixel(x, y, b.GetPixel((int)x, (int)y)); + // } + //} + //Orvid.Graphics.ImageFormats.OIFImage oif = new Orvid.Graphics.ImageFormats.OIFImage(); + //oif.Save(i, s); + //s.Flush(); + //s.Close(); + + if (!thso) + { + FileStream s = new FileStream(Path.GetFullPath("Building.png"), FileMode.Open); + Orvid.Graphics.ImageFormats.PngImage p = new Orvid.Graphics.ImageFormats.PngImage(); + Orvid.Graphics.Image i = p.Load(s); + s.Close(); + s.Dispose(); + Bitmap b = new Bitmap(i.Width, i.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + b.SetPixel((int)x, (int)y, i.GetPixel(x, y)); + } + } + pictureBox1.Image = b; + thso = true; + } + else + { + if (!t2) + { + Bitmap b = (Bitmap)pictureBox1.Image; + Orvid.Graphics.Image i = new Orvid.Graphics.Image(b.Width, b.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + i.SetPixel(x, y, b.GetPixel((int)x, (int)y)); + } + } + i = Orvid.Graphics.ImageManipulator.Resize(i, new Orvid.Graphics.Vec2(b.Width / 4, b.Height / 4), Orvid.Graphics.ImageManipulator.ScalingAlgorithm.Bicubic); + Bitmap b2 = new Bitmap(i.Width, i.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + b2.SetPixel((int)x, (int)y, i.GetPixel(x, y)); + } + } + pictureBox2.Image = b2; + pictureBox2.Size = new Size(b2.Width, b2.Height); + t2 = true; + } + else + { + if (!t3) + { + Bitmap b = (Bitmap)pictureBox1.Image; + Orvid.Graphics.Image i = new Orvid.Graphics.Image(b.Width, b.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + i.SetPixel(x, y, b.GetPixel((int)x, (int)y)); + } + } + i = Orvid.Graphics.ImageManipulator.Resize(i, new Orvid.Graphics.Vec2(b.Width / 4, b.Height / 4), Orvid.Graphics.ImageManipulator.ScalingAlgorithm.Bilinear); + Bitmap b2 = new Bitmap(i.Width, i.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + b2.SetPixel((int)x, (int)y, i.GetPixel(x, y)); + } + } + pictureBox2.Image = b2; + pictureBox2.Size = new Size(b2.Width, b2.Height); + t3 = true; + } + else + { + + Bitmap b = (Bitmap)pictureBox1.Image; + Orvid.Graphics.Image i = new Orvid.Graphics.Image(b.Width, b.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + i.SetPixel(x, y, b.GetPixel((int)x, (int)y)); + } + } + i = Orvid.Graphics.ImageManipulator.Resize(i, new Orvid.Graphics.Vec2(b.Width / 2, b.Height / 2), Orvid.Graphics.ImageManipulator.ScalingAlgorithm.NearestNeighbor); + Bitmap b2 = new Bitmap(i.Width, i.Height); + for (uint x = 0; x < i.Width; x++) + { + for (uint y = 0; y < i.Height; y++) + { + b2.SetPixel((int)x, (int)y, i.GetPixel(x, y)); + } + } + pictureBox2.Image = b2; + pictureBox2.Size = new Size(b2.Width, b2.Height); + t2 = false; + t3 = false; + } + } + } + + //Font f = new Font("Chiller", 64, (FontStyle)0, GraphicsUnit.Pixel); + //Bitmap b = new Bitmap(1, 1); + //Graphics g = Graphics.FromImage(b); + //SizeF sz = g.MeasureString(new String(new char[] { (char)6 }), f); + //byte height = (byte)Math.Ceiling(sz.Height + 2); + //byte width = (byte)Math.Ceiling(sz.Width + 4); + //b = new Bitmap(width, height); + //g = Graphics.FromImage(b); + //g.Clear(Color.White); + //g.DrawString(new String(new char[] { (char)Int32.Parse(textBox2.Text) }), f, new SolidBrush(Color.Black), 2, 2); + //g.Flush(System.Drawing.Drawing2D.FlushIntention.Flush); + //pictureBox1.Image = b; + //pictureBox1.Size = new Size(b.Width, b.Height); + + //Orvid.Graphics.Image i = new Orvid.Graphics.Image(b.Width, b.Height); + //for (uint x = 0; x < i.Width; x++) + //{ + // for (uint y = 0; y < i.Height; y++) + // { + // i.SetPixel(x, y, b.GetPixel((int)x, (int)y)); + // } + //} + //FileStream s = new FileStream("Test.oif", FileMode.OpenOrCreate); + //Orvid.Graphics.ImageFormats.OIFImage t = new Orvid.Graphics.ImageFormats.OIFImage(); + //t.Save(i, s); + //s.Flush(); + //s.Close(); + //s.Dispose(); + + //s = new FileStream("Test.oif", FileMode.Open); + //Orvid.Graphics.Image i2 = t.Load(s); + //Bitmap b2 = new Bitmap(i2.Width, i2.Height); + //for (uint x = 0; x < i2.Width; x++) + //{ + // for (uint y = 0; y < i2.Height; y++) + // { + // b2.SetPixel((int)x, (int)y, i2.GetPixel(x, y)); + // } + //} + //pictureBox2.Image = b2; + //pictureBox2.Size = new Size(b2.Width, b2.Height); + //s.Close(); + //s.Dispose(); + } + + private void textBox2_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyData == Keys.Enter || e.KeyData == Keys.Return) + { + e.Handled = true; + button1_Click(button1, new EventArgs()); + } + } + } } Index: Form1.Designer.cs =================================================================== --- Form1.Designer.cs (revision 81403) +++ Form1.Designer.cs (working copy) @@ -41,6 +41,7 @@ this.label3 = new System.Windows.Forms.Label(); this.pictureBox2 = new System.Windows.Forms.PictureBox(); this.textBox2 = new System.Windows.Forms.TextBox(); + this.TestButton2 = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); this.SuspendLayout(); @@ -148,8 +149,7 @@ // // pictureBox2 // - this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + this.pictureBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this.pictureBox2.Location = new System.Drawing.Point(311, 12); this.pictureBox2.Name = "pictureBox2"; this.pictureBox2.Size = new System.Drawing.Size(32, 32); @@ -162,12 +162,24 @@ this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(100, 20); this.textBox2.TabIndex = 11; + this.textBox2.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBox2_KeyDown); // + // TestButton2 + // + this.TestButton2.Location = new System.Drawing.Point(42, 268); + this.TestButton2.Name = "TestButton2"; + this.TestButton2.Size = new System.Drawing.Size(75, 44); + this.TestButton2.TabIndex = 12; + this.TestButton2.Text = "Test Image Fomat"; + this.TestButton2.UseVisualStyleBackColor = true; + this.TestButton2.Click += new System.EventHandler(this.TestButton2_Click); + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(449, 363); + this.Controls.Add(this.TestButton2); this.Controls.Add(this.textBox2); this.Controls.Add(this.pictureBox2); this.Controls.Add(this.label3); @@ -205,6 +217,7 @@ private System.Windows.Forms.Label label3; private System.Windows.Forms.PictureBox pictureBox2; private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Button TestButton2; } }