Exemplo n.º 1
0
        public static UnsafeBuffer Decode(VoidPtr addr, uint length, WiiColorComponentType componentType)
        {
            int bytesPerVal = 0;
            ColorCodecConverter dec;

            switch (componentType)
            {
            case WiiColorComponentType.RGB565:
                dec         = Color_wRGB565_RGBA;
                bytesPerVal = 2;
                break;

            case WiiColorComponentType.RGB8:
                dec         = Color_RGB_RGBA;
                bytesPerVal = 3;
                break;

            case WiiColorComponentType.RGBA4:
                dec         = Color_wRGBA4_RGBA;
                bytesPerVal = 3;
                break;

            case WiiColorComponentType.RGBA6:
                dec         = Color_wRGBA6_RGBA;
                bytesPerVal = 2;
                break;

            case WiiColorComponentType.RGBA8:
                dec         = Color_RGBA_RGBA;
                bytesPerVal = 4;
                break;

            case WiiColorComponentType.RGBX8:
                dec         = Color_RGBX_RGBA;
                bytesPerVal = 4;
                break;

            default: return(null);
            }

            int count = (int)(length / bytesPerVal);

            UnsafeBuffer buffer = new UnsafeBuffer(count * 4);
            byte *       pIn    = (byte *)addr;
            byte *       pOut   = (byte *)buffer.Address;

            while (count-- > 0)
            {
                dec(ref pIn, ref pOut);
            }

            return(buffer);
        }
Exemplo n.º 2
0
        private void Evaluate()
        {
            //Colors will almost always need remapping
            _remapData = new Remapper();
            _remapData.Remap(new MemoryList <RGBAPixel>(_pData, _srcCount), null); //Don't bother sorting

            int[] imp    = _remapData._impTable;
            int   impLen = imp.Length;

            _dstCount = impLen;

            //Do we have alpha?
            int i = 0;

            while (i < _dstCount && _pData[imp[i]].A == 255)
            {
                i++;
            }

            _hasAlpha = i < _srcCount;

            //Determine format
            if (_hasAlpha)
            {
                _outType = WiiColorComponentType.RGBA8;
            }
            else
            {
                _outType = WiiColorComponentType.RGB8;
            }

            switch (_outType)
            {
            case WiiColorComponentType.RGB565:
            case WiiColorComponentType.RGBA4:
                _dstStride = 2;
                break;

            case WiiColorComponentType.RGB8:
            case WiiColorComponentType.RGBA6:
                _dstStride = 3;
                break;

            case WiiColorComponentType.RGBA8:
            case WiiColorComponentType.RGBX8:
                _dstStride = 4;
                break;
            }

            _dataLen = _dstStride * _dstCount;

            GetEncoder();
        }
Exemplo n.º 3
0
        private void Evaluate()
        {
            //Colors will almost always need remapping
            _remapData = new Remapper();
            _remapData.Remap<RGBAPixel>(new MemoryList<RGBAPixel>(_pData, _srcCount), null); //Don't bother sorting

            int[] imp = _remapData._impTable;
            int impLen = imp.Length;

            _dstCount = impLen;

            //Do we have alpha?
            int i = 0;
            while ((i < _dstCount) && (_pData[imp[i]].A == 255)) i++;

            _hasAlpha = i < _srcCount;

            //Determine format
            if (_hasAlpha)
                _outType = WiiColorComponentType.RGBA8;
            else
                _outType = WiiColorComponentType.RGB8;

            switch (_outType)
            {
                case WiiColorComponentType.RGB565:
                case WiiColorComponentType.RGBA4:
                    _dstStride = 2; break;
                case WiiColorComponentType.RGB8:
                case WiiColorComponentType.RGBA6:
                    _dstStride = 3; break;
                case WiiColorComponentType.RGBA8:
                case WiiColorComponentType.RGBX8:
                    _dstStride = 4; break;
            }

            _dataLen = _dstStride * _dstCount;

            GetEncoder();
        }