Beispiel #1
0
        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();
            }
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
 public void GetData()
 {
     this._paletteRam       = InteropEmu.DebugGetMemoryState(DebugMemoryType.PaletteMemory);
     this._palettePixelData = InteropEmu.DebugGetPalette();
 }