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)); }
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)); }
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(); } } }
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); } } } }
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); }