コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }