public static ARGBPixel[] ExtractColors(MDL0ColorData* colors) { int count = colors->_numEntries; ARGBPixel[] c = new ARGBPixel[count]; fixed (ARGBPixel* p = c) { ARGBPixel* dPtr = p; switch (colors->Type) { case WiiColorComponentType.RGB565: { wRGB565Pixel* sPtr = (wRGB565Pixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } case WiiColorComponentType.RGB8: { wRGBPixel* sPtr = (wRGBPixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } case WiiColorComponentType.RGBX8: { wRGBXPixel* sPtr = (wRGBXPixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } case WiiColorComponentType.RGBA4: { wRGBA4Pixel* sPtr = (wRGBA4Pixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } case WiiColorComponentType.RGBA6: { wRGBA6Pixel* sPtr = (wRGBA6Pixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } case WiiColorComponentType.RGBA8: { wRGBAPixel* sPtr = (wRGBAPixel*)colors->Data; for (int i = 0; i < count; i++) *dPtr++ = (ARGBPixel)(*sPtr++); break; } } } return c; }
public static UnsafeBuffer Decode(MDL0ColorData* header) { int count = header->_numEntries; UnsafeBuffer buffer = new UnsafeBuffer(count * 4); byte* pIn = (byte*)header + header->_dataOffset; byte* pOut = (byte*)buffer.Address; ColorCodecConverter dec; switch (header->Type) { case WiiColorComponentType.RGB565: dec = Color_wRGB565_RGBA; break; case WiiColorComponentType.RGB8: dec = Color_RGB_RGBA; break; case WiiColorComponentType.RGBA4: dec = Color_wRGBA4_RGBA; break; case WiiColorComponentType.RGBA6: dec = Color_wRGBA6_RGBA; break; case WiiColorComponentType.RGBA8: dec = Color_RGBA_RGBA; break; case WiiColorComponentType.RGBX8: dec = Color_RGBX_RGBA; break; default: return null; } while (count-- > 0) dec(ref pIn, ref pOut); return buffer; }