Esempio n. 1
0
        private void InsertImage(Bitmap bm)
        {
            if (romData != null)
            {
                byte[] imageData = null, paletteData = null;

                N64Graphics.Convert(ref imageData, ref paletteData, viewerCodec, bm);

                bool bufferChanged = ensureCapacity(ref romData, imageData, offset);
                if (bufferChanged)
                {
                    DisplayFileSize(romData.Length);
                }
                Array.Copy(imageData, 0, romData, offset, imageData.Length);
                fileDataChanged = true;

                if (paletteData != null && paletteData.Length > 0)
                {
                    int    palOffset = (int)numericPalette.Value;
                    byte[] paletteDest;
                    if (separatePalette && extPaletteData != null)
                    {
                        ensureCapacity(ref extPaletteData, paletteData, palOffset);
                        extPaletteChanged = true;
                        paletteDest       = extPaletteData;
                    }
                    else
                    {
                        bufferChanged = ensureCapacity(ref romData, paletteData, palOffset);
                        if (bufferChanged)
                        {
                            DisplayFileSize(romData.Length);
                        }
                        paletteDest = romData;
                    }

                    Array.Copy(paletteData, 0, paletteDest, palOffset, paletteData.Length);
                    UpdatePalette();
                }

                foreach (GraphicsViewer gv in viewers)
                {
                    if (bufferChanged)
                    {
                        gv.SetData(romData);
                    }
                    gv.Invalidate();
                }
            }
        }
Esempio n. 2
0
        private void insertImage(Bitmap bm)
        {
            if (romData != null)
            {
                byte[] imageData = null, paletteData = null;

                N64Graphics.Convert(ref imageData, ref paletteData, viewerCodec, bm);

                int copyLength = Math.Min(imageData.Length, romData.Length - offset);
                Array.Copy(imageData, 0, romData, offset, copyLength);
                fileDataChanged = true;

                if (paletteData != null)
                {
                    byte[] paletteDest;
                    if (separatePalette && extPaletteData != null)
                    {
                        extPaletteChanged = true;
                        paletteDest       = extPaletteData;
                    }
                    else
                    {
                        paletteDest = romData;
                    }
                    int palOffset = (int)numericPalette.Value;
                    copyLength = Math.Min(paletteData.Length, paletteDest.Length - palOffset);
                    if (copyLength > 0)
                    {
                        Array.Copy(paletteData, 0, paletteDest, palOffset, copyLength);
                        UpdatePalette();
                    }
                }

                foreach (GraphicsViewer gv in viewers)
                {
                    gv.Invalidate();
                }
            }
        }
Esempio n. 3
0
        private void runTest(int idx, bool verbose, PictureBox pbIn, PictureBox pbOut)
        {
            int width  = 32;
            int height = 32;

            byte[] test       = new byte[width * height * 4]; // worst case
            byte[] result     = null;
            byte[] pal        = new byte[16 * 16 * 2];
            byte[] resultPal  = null;
            int    errorCount = 0;

            StringBuilder sb = new StringBuilder();

            N64Codec testCodec = WhichCodec(idx);

            // randomize inputs
            Random rng = new Random();

            rng.NextBytes(test);
            rng.NextBytes(pal);

            // if alpha bit clear, clear all bits
            switch (testCodec)
            {
            case N64Codec.RGBA16:
                for (int i = 0; i < test.Length; i += 2)
                {
                    if ((test[i + 1] & 0x1) == 0)
                    {
                        test[i]     = 0;
                        test[i + 1] = 0;
                    }
                }
                break;

            case N64Codec.IA16:
                for (int i = 0; i < test.Length; i += 2)
                {
                    if ((test[i + 1]) == 0)
                    {
                        test[i] = 0;
                    }
                }
                break;

            case N64Codec.IA8:
                for (int i = 0; i < test.Length; i++)
                {
                    if ((test[i] & 0x0F) == 0)
                    {
                        test[i] = 0;
                    }
                }
                break;

            case N64Codec.IA4:
                for (int i = 0; i < test.Length; i++)
                {
                    if ((test[i] & 0x10) == 0)
                    {
                        test[i] &= 0x0F;
                    }
                    if ((test[i] & 0x01) == 0)
                    {
                        test[i] &= 0xF0;
                    }
                }
                break;

            case N64Codec.CI4:
            case N64Codec.CI8:
                for (int i = 0; i < pal.Length; i += 2)
                {
                    if ((pal[i + 1] & 0x1) == 0)
                    {
                        pal[i]     = 0;
                        pal[i + 1] = 0;
                    }
                }
                break;
            }

            Bitmap   b = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(b);

            N64Graphics.RenderTexture(g, test, pal, 0, width, height, 1, testCodec, N64IMode.AlphaCopyIntensity);
            N64Graphics.Convert(ref result, ref resultPal, testCodec, b);
            Bitmap bres = new Bitmap(width, height, PixelFormat.Format32bppArgb);

            N64Graphics.RenderTexture(Graphics.FromImage(bres), result, resultPal, 0, width, height, 1, testCodec, N64IMode.AlphaCopyIntensity);
            for (int i = 0; i < result.Length; i++)
            {
                if (test[i] != result[i])
                {
                    errorCount++;
                }
                if (verbose)
                {
                    sb.AppendFormat("{0:X03} {1:X02} {2:X02}\r\n", i, test[i], result[i]);
                }
            }
            if (resultPal != null)
            {
                for (int i = 0; i < resultPal.Length; i++)
                {
                    if (pal[i] != resultPal[i])
                    {
                        errorCount++;
                    }
                    if (verbose)
                    {
                        sb.AppendFormat("P {0:X03} {1:X02} {2:X02}\r\n", i, pal[i], resultPal[i]);
                    }
                }
            }

            // publish results
            sb.AppendFormat("Test[{0}] {1}: {2} errors\r\n", idx, N64Graphics.CodecString(testCodec), errorCount);
            textBoxLog.AppendText(sb.ToString());
            pbIn.Image  = b;
            pbOut.Image = bres;
        }