示例#1
0
			protected override void ReadBlock(SimpleBinaryStream stream, ref PixelColor[,] cache, int blockX)
			{
				blockX *= 4;
				PixelColor[] baseColor = new PixelColor[4];
				ushort color0, color1;
				baseColor[0] = GetColorFromRGB565(color0 = stream.ReadUInt16());
				baseColor[1] = GetColorFromRGB565(color1 = stream.ReadUInt16());
				if (color0 > color1)
				{
					// baseColor[2] = (baseColor[0] * 2 + baseColor[1]) / 3;
					baseColor[2] = PixelColor.MAD(baseColor[0], 2, baseColor[1], 3);
					baseColor[3] = PixelColor.MAD(baseColor[1], 2, baseColor[0], 3);
				}
				else
				{
					baseColor[2] = PixelColor.AVG(baseColor[0], baseColor[1]);
					baseColor[3] = new PixelColor(0, 0, 0, 1f);
				}

				for (int y = 0; y < 4; y++)
				{
					byte index = stream.ReadByte();
					cache[y, blockX + 0] = baseColor[(index >> 0) & 0x3];
					cache[y, blockX + 1] = baseColor[(index >> 2) & 0x3];
					cache[y, blockX + 2] = baseColor[(index >> 4) & 0x3];
					cache[y, blockX + 3] = baseColor[(index >> 6) & 0x3];
				}
			}