public void RefreshPalette() { if (_selectedPalette < 0) { return; } byte[] paletteRam = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory); int[] palette = InteropEmu.DebugGetPalette(); int[] currentPalette = new int[16]; Array.Copy(palette, _selectedPalette * 4, currentPalette, 0, 4); GCHandle handle = GCHandle.Alloc(currentPalette, GCHandleType.Pinned); try { Bitmap source = new Bitmap(4, 1, 4 * 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb, handle.AddrOfPinnedObject()); Bitmap target = new Bitmap(128, 32); using (Graphics g = Graphics.FromImage(target)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; g.ScaleTransform(32, 32); g.DrawImageUnscaled(source, 0, 0); g.ResetTransform(); using (Font font = new Font(BaseControl.MonospaceFontFamily, 10, GraphicsUnit.Pixel)) { using (Brush bg = new SolidBrush(Color.FromArgb(150, Color.LightGray))) { for (int i = 0; i < 4; i++) { if (this.DisplayIndexes) { g.DrawOutlinedString(i.ToString(), font, Brushes.Black, bg, 5 + i * 32, 2); } else { g.DrawOutlinedString(paletteRam[_selectedPalette * 4 + i].ToString("X2"), font, Brushes.Black, bg, 14 + i * 32, 18); } } } } if (this.AllowSelection) { using (Pen pen = new Pen(Color.LightBlue, 3)) { g.DrawRectangle(pen, this.SelectedColor * 32 + 2, 2, 29, 29); } } if (this.HighlightMouseOver && _hoverColor >= 0) { using (Pen pen = new Pen(Color.DarkGray, 3)) { g.DrawRectangle(pen, _hoverColor * 32 + 2, 2, 29, 29); } } } this.picPaletteSelection.Image = target; } finally { handle.Free(); } }
public static void DrawPalettePreview(int paletteIndex, Graphics g) { int[] palette = InteropEmu.DebugGetPalette(); GCHandle handle = GCHandle.Alloc(palette, GCHandleType.Pinned); Bitmap source = new Bitmap(4, 1, 4 * 4, PixelFormat.Format32bppPArgb, handle.AddrOfPinnedObject() + paletteIndex * 16); g.InterpolationMode = InterpolationMode.NearestNeighbor; g.SmoothingMode = SmoothingMode.None; g.PixelOffsetMode = PixelOffsetMode.Half; Matrix transform = g.Transform; g.ScaleTransform(16, 16); g.DrawImageUnscaled(source, 0, 0); g.Transform = transform; g.DrawRectangle(Pens.White, 1, 1, 63, 15); }
public void RefreshViewer() { this._paletteRam = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory); byte[] pixelData = InteropEmu.DebugGetPalette(); GCHandle handle = GCHandle.Alloc(pixelData, GCHandleType.Pinned); try { Bitmap source = new Bitmap(4, 8, 4 * 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb, handle.AddrOfPinnedObject()); Bitmap target = new Bitmap(128, 256); using (Graphics g = Graphics.FromImage(target)) { g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half; g.DrawImage(source, new Rectangle(0, 0, 128, 256), new Rectangle(0, 0, 4, 8), GraphicsUnit.Pixel); } this.picPalette.Image = target; } finally { handle.Free(); } }
public void GetData() { this._paletteRam = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory); this._palettePixelData = InteropEmu.DebugGetPalette(); }