Example #1
0
 public DTX1Block(DTX1Palette palette, byte[] pixels)
 {
     _palette = palette;
     _pixels = pixels;
 }
Example #2
0
        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;
        }