示例#1
0
        public static Color I8Color(byte[] data, int pixOffset, N64IMode mode = N64IMode.AlphaCopyIntensity)
        {
            int i = data[pixOffset];
            int a = i;

            switch (mode)
            {
            case N64IMode.AlphaBinary: a = (i == 0) ? 0 : 0xFF; break;

            case N64IMode.AlphaCopyIntensity: a = i; break;

            case N64IMode.AlphaOne: a = 0xFF; break;
            }
            return(Color.FromArgb(a, i, i, i));
        }
示例#2
0
        public static Color I4Color(byte[] data, int pixOffset, int nibble, N64IMode mode = N64IMode.AlphaCopyIntensity)
        {
            int shift = (1 - nibble) * 4;
            int i     = (data[pixOffset] >> shift) & 0xF;

            i *= 0x11;
            int a = i;

            switch (mode)
            {
            case N64IMode.AlphaBinary: a = (i == 0) ? 0 : 0xFF; break;

            case N64IMode.AlphaCopyIntensity: a = i; break;

            case N64IMode.AlphaOne: a = 0xFF; break;
            }
            return(Color.FromArgb(a, i, i, i));
        }
示例#3
0
        private void toolStripAlpha_SelectedIndexChanged(object sender, EventArgs e)
        {
            N64IMode prevMode = viewerMode;

            switch (toolStripAlpha.SelectedIndex)
            {
            case 0: viewerMode = N64IMode.AlphaCopyIntensity; break;

            case 1: viewerMode = N64IMode.AlphaBinary; break;

            case 2: viewerMode = N64IMode.AlphaOne; break;
            }
            if (prevMode != viewerMode)
            {
                foreach (GraphicsViewer gv in viewers)
                {
                    gv.Mode = viewerMode;
                    gv.Invalidate();
                }
            }
        }
示例#4
0
        public static void RenderTexture(Graphics g, byte[] data, byte[] palette, int offset, int width, int height, int scale, N64Codec codec, N64IMode mode)
        {
            Brush brush;

            for (int h = 0; h < height; h++)
            {
                for (int w = 0; w < width; w++)
                {
                    int pixOffset   = (h * width + w);
                    int bytesPerPix = 1;
                    int select      = 0;
                    switch (codec)
                    {
                    case N64Codec.RGBA16: bytesPerPix = 2; pixOffset *= bytesPerPix; break;

                    case N64Codec.RGBA32: bytesPerPix = 4; pixOffset *= bytesPerPix; break;

                    case N64Codec.IA16: bytesPerPix = 2; pixOffset *= bytesPerPix; break;

                    case N64Codec.IA8: break;

                    case N64Codec.IA4:
                        select     = pixOffset & 0x1;
                        pixOffset /= 2;
                        break;

                    case N64Codec.I8: break;

                    case N64Codec.I4:
                    case N64Codec.CI4:
                        select     = pixOffset & 0x1;
                        pixOffset /= 2;
                        break;

                    case N64Codec.CI8: break;

                    case N64Codec.ONEBPP:
                        select     = pixOffset & 0x7;
                        pixOffset /= 8;
                        break;
                    }
                    pixOffset += offset;
                    if (data.Length > pixOffset + bytesPerPix - 1)
                    {
                        brush = new SolidBrush(MakeColor(data, palette, pixOffset, select, codec, mode));
                        g.FillRectangle(brush, w * scale, h * scale, scale, scale);
                    }
                }
            }
        }
示例#5
0
        public static Color MakeColor(byte[] data, byte[] palette, int offset, int select, N64Codec codec, N64IMode mode)
        {
            Color color;

            switch (codec)
            {
            case N64Codec.RGBA16:
                color = RGBA16Color(data, offset);
                break;

            case N64Codec.RGBA32:
                color = RGBA32Color(data, offset);
                break;

            case N64Codec.IA16:
                color = IA16Color(data, offset);
                break;

            case N64Codec.IA8:
                color = IA8Color(data, offset);
                break;

            case N64Codec.IA4:
                color = IA4Color(data, offset, select);
                break;

            case N64Codec.I8:
                color = I8Color(data, offset, mode);
                break;

            case N64Codec.I4:
                color = I4Color(data, offset, select, mode);
                break;

            case N64Codec.CI8:
                color = CI8Color(data, palette, offset);
                break;

            case N64Codec.CI4:
                color = CI4Color(data, palette, offset, select);
                break;

            case N64Codec.ONEBPP:
                color = BPPColor(data, offset, select);
                break;

            default:
                color = RGBA16Color(data, offset);
                break;
            }
            return(color);
        }