public void CommitChanges(Texture currentSkin, bool save) { using (var grabber = new ColorGrabber(currentSkin, Width, Height)) { grabber.Load(); if (currentSkin != GLImage) { grabber.Texture = GLImage; grabber.Save(); } if (save) { var newBitmap = new Bitmap(Width, Height); using (var fp = new FastPixel(newBitmap, true)) { for (int y = 0; y < Height; ++y) { for (int x = 0; x < Width; ++x) { ColorPixel c = grabber[x, y]; fp.SetPixel(x, y, Color.FromArgb(c.Alpha, c.Red, c.Green, c.Blue)); } } } newBitmap.Save(File.FullName); newBitmap.Dispose(); var md = new Dictionary <string, string>(); md.Add("Model", Model.Path); PNGMetadata.WriteMetadata(File.FullName, md); SetImages(true); Dirty = false; } } }
public void Resize(int width, int height, ResizeType type = ResizeType.Scale) { using (var newBitmap = new Bitmap(width, height)) { using (Graphics g = Graphics.FromImage(newBitmap)) { g.SmoothingMode = SmoothingMode.None; g.InterpolationMode = InterpolationMode.NearestNeighbor; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.Clear(Color.FromArgb(0, 0, 0, 0)); using (Image temp = System.Drawing.Image.FromFile(File.FullName)) { if (type == ResizeType.Scale) { g.DrawImage(temp, 0, 0, newBitmap.Width, newBitmap.Height); } else { g.DrawImage(temp, 0, 0, temp.Width, temp.Height); } } } newBitmap.Save(File.FullName); var md = new Dictionary <string, string>(); md.Add("Model", Model.Name); PNGMetadata.WriteMetadata(File.FullName, md); } SetImages(); Undo.Clear(); Editor.MainForm.CheckUndo(); }
public bool SetImages(bool updateGL = true) { Bitmap image = null; try { using (FileStream file = File.Open(FileMode.Open, FileAccess.Read, FileShare.Read)) image = new Bitmap(file); Size = image.Size; if (Head != null) { Head.Dispose(); if (updateGL) { Unload(); Create(); } } float scale = Size.Width / 64.0f; var headSize = (int)(8.0f * scale); var helmetLoc = (int)(40.0f * scale); Head = new Bitmap(headSize, headSize); using (Graphics g = Graphics.FromImage(Head)) { g.DrawImage(image, new Rectangle(0, 0, headSize, headSize), new Rectangle(headSize, headSize, headSize, headSize), GraphicsUnit.Pixel); g.DrawImage(image, new Rectangle(0, 0, headSize, headSize), new Rectangle(helmetLoc, headSize, headSize, headSize), GraphicsUnit.Pixel); } if (Model == null) { Dictionary <string, string> metadata = PNGMetadata.ReadMetadata(File.FullName); if (metadata.ContainsKey("Model")) { Model = ModelLoader.GetModelForPath(metadata["Model"]); if (Model == null) { if (image.Height == 64) { Model = ModelLoader.GetModelForPath("Players/Steve"); } else { Model = ModelLoader.GetModelForPath("Players/Steve (Minimal)"); } } } else { if (image.Height == 64) { Model = ModelLoader.GetModelForPath("Players/Steve"); } else { Model = ModelLoader.GetModelForPath("Players/Steve (Minimal)"); } } } } catch (Exception) { MessageBox.Show(String.Format(Editor.GetLanguageString("E_SKINERROR"), File.FullName)); return(false); } finally { if (image != null) { image.Dispose(); } } return(true); }