public DTX1Block(DTX1Palette palette, byte[] pixels) { _palette = palette; _pixels = pixels; }
private void DXT1(Stream stream) { var pixelW = _header.dwWidth; var pixelH = _header.dwHeight; var rows = pixelW / 4; var cols = pixelH / 4; var paleteCount = rows * cols; byte[] color1 = new byte[2]; byte[] color2 = new byte[2]; var pixelblock = new byte[4]; List<DTX1Block> blocks = new List<DTX1Block>(); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { stream.Read(color1, 0, 2); stream.Read(color2, 0, 2); var palette = new DTX1Palette(color1, color2); stream.Read(pixelblock, 0, 4); var block = new DTX1Block(palette, pixelblock); blocks.Add(block); } } //lay the pixels out in a bitmap fashion int[] pixels = new int[pixelW * pixelH * 4]; Color[] cpixels = new Color[pixelW * pixelH]; var bmp = new Bitmap((int)pixelW, (int)pixelH); //var bsource = System.Windows.Media.Imaging.BitmapSource.Create(pixelW,pixelH,96,96, System.Windows.Media.PixelFormats.Rgb24,null, /* for (int i = 0; i < pixelH; i++) { for(int j = 0; j < pixelW; j++) { switch(i%5) { case 0: bmp.SetPixel(j, i, Color.Blue); break; case 1: bmp.SetPixel(j, i, Color.Green); break; case 2: bmp.SetPixel(j, i, Color.White); break; case 3: bmp.SetPixel(j, i, Color.Black); break; case 4: bmp.SetPixel(j, i, Color.Red); break; } } }*/ for (int i = 0; i < pixelH; i++) { var offset = (int)(i * pixelH); //* 4; for (int j = 0; j < pixelW; j++) { int blockoffset = i / 4; var block = blocks.ElementAt(blockoffset + (j / 4 + i / 4)); //which pixel in block is needed int p = (i % 4) * 4 + j % 4; var c = block.GetPixel(p); //pixels[j * offset] var color = Color.FromArgb(0,c.Red,c.Green,c.Blue); //var color = Color.FromArgb(0, 250, 0, 0); //cpixels[offset+j] = Color.FromArgb(255,c.Red,c.Green,c.Blue); bmp.SetPixel(j, i, color); } } _bitmap = bmp; }