Exemplo n.º 1
0
        public void RefreshViewer()
        {
            int height = _isGameboyMode ? 256 : 240;

            if (_previewImage == null || _previewImage.Height != height)
            {
                _previewData             = new byte[256 * height * 4];
                _previewImage            = new Bitmap(256, height, PixelFormat.Format32bppPArgb);
                ctrlImagePanel.ImageSize = new Size(256, height);
                ctrlImagePanel.Image     = _previewImage;
            }

            ctrlSpriteList.SetData(_state, _oamRam, _state.Ppu.OamMode, _isGameboyMode);

            if (_isGameboyMode)
            {
                DebugApi.GetGameboySpritePreview(_options, _state.Gameboy.Ppu, _vram, _oamRam, _previewData);
            }
            else
            {
                DebugApi.GetSpritePreview(_options, _state.Ppu, _vram, _oamRam, _cgram, _previewData);
            }

            using (Graphics g = Graphics.FromImage(_previewImage)) {
                GCHandle handle = GCHandle.Alloc(_previewData, GCHandleType.Pinned);
                Bitmap   source = new Bitmap(256, height, 4 * 256, PixelFormat.Format32bppPArgb, handle.AddrOfPinnedObject());
                g.DrawImage(source, 0, 0);
                handle.Free();
            }

            if (_options.SelectedSprite >= 0)
            {
                ctrlImagePanel.Selection = GetSpriteInfo(_options.SelectedSprite).GetBounds();
            }
            else
            {
                ctrlImagePanel.Selection = Rectangle.Empty;
            }

            ctrlImagePanel.Refresh();
        }