Exemplo n.º 1
0
        public Image GetImage()
        {
            var bitmap = new Bitmap(Size.Width, Size.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            if (PixelFormat == ImgPixelFormat.Bgra32)
            {
                var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                                 ImageLockMode.ReadWrite, bitmap.PixelFormat);
                Marshal.Copy(Data, 0, bitmapData.Scan0, bitmapData.Stride * bitmap.Height);
                bitmap.UnlockBits(bitmapData);
                var stream = new MemoryStream();
                bitmap.Save(stream, ImageFormat.Bmp);
                return(Image.FromStream(stream));
            }
            if (PixelFormat != ImgPixelFormat.Dxt1 && PixelFormat != ImgPixelFormat.Dxt3)
            {
                if (PixelFormat != ImgPixelFormat.Dxt5)
                {
                    throw new Exception("Can't decode DDS, Unknown format: " + PixelFormat);
                }
            }
            var unk = new ImageRelatedClass(bitmap);

            unk.method_4();
            var binaryReader = new BinaryReader(new MemoryStream(Data));

            ZzTextureClass.smethod_17(binaryReader, unk, PixelFormat);
            binaryReader.Close();
            unk.method_5(true);
            var stream2 = new MemoryStream();

            bitmap.Save(stream2, ImageFormat.Bmp);
            return(Image.FromStream(stream2));
        }
Exemplo n.º 2
0
        public static void smethod_17(BinaryReader binaryReader0, ImageRelatedClass class2190,
                                      ImgPixelFormat imgpixelFormat0)
        {
            var array = new Tom[16];
            var num   = class2190.method_1();
            var num2  = class2190.method_0();

            for (var i = 0; i < num; i += 4)
            {
                for (var j = 0; j < num2; j += 4)
                {
                    if (imgpixelFormat0 == ImgPixelFormat.Dxt3)
                    {
                        var array2 = new ushort[4];
                        for (var k = 0; k < 4; k++)
                        {
                            for (var l = 0; l < 4; l++)
                            {
                                if (l == 0)
                                {
                                    array2[k] = binaryReader0.ReadUInt16();
                                }
                                array[k * 4 + l].Float0 = (array2[k] & 15) / 15f;
                                var expr74Cp0 = array2;
                                var expr74Cp1 = k;
                                expr74Cp0[expr74Cp1] = (ushort)(expr74Cp0[expr74Cp1] >> 4);
                            }
                        }
                    }
                    else if (imgpixelFormat0 == ImgPixelFormat.Dxt5)
                    {
                        var array3 = binaryReader0.ReadBytes(2);
                        var array4 = binaryReader0.ReadBytes(6);
                        var array5 = new float[8];
                        array5[0] = array3[0] / 255f;
                        array5[1] = array3[1] / 255f;
                        var num3 = 4;
                        if (array3[0] > array3[1])
                        {
                            num3 = 6;
                        }
                        else
                        {
                            array5[6] = 0f;
                            array5[7] = 1f;
                        }
                        var num4 = 1f / (num3 + 1);
                        for (var m = 0; m < num3; m++)
                        {
                            var num5 = (num3 - m) * num4;
                            var num6 = (m + 1) * num4;
                            array5[m + 2] = num5 * array3[0] + num6 * array3[1];
                        }
                        for (var n = 0; n < 16; n++)
                        {
                            //Console.WriteLine("Broken");
                            var div = (n * 3) / 8;
                            var rem = (n * 3) % 8;
                            var b   = (byte)((array4[div] >> rem) & 7);
                            if (rem > 5)
                            {
                                var b2 = (byte)((array4[div + 1] << (8 - rem)) & 0xFF);
                                b |= (byte)(b2 & 7);
                            }
                            array[n].Float0 = array5[b];
                        }
                    }
                    var @struct = Jerry.smethod_0(binaryReader0);
                    var array6  = new Tom[4];
                    array6[0].Float1 = ((@struct.Ushort0 & 63488) >> 11) / 31f;
                    array6[0].Float2 = ((@struct.Ushort0 & 2016) >> 5) / 63f;
                    array6[0].Float3 = (@struct.Ushort0 & 31) / 31f;
                    array6[1].Float1 = ((@struct.Ushort1 & 63488) >> 11) / 31f;
                    array6[1].Float2 = ((@struct.Ushort1 & 2016) >> 5) / 63f;
                    array6[1].Float3 = (@struct.Ushort1 & 31) / 31f;
                    if (imgpixelFormat0 == ImgPixelFormat.Dxt1 && @struct.Ushort0 <= @struct.Ushort1)
                    {
                        array6[2] = Tom.smethod_1(Tom.smethod_2(array6[0], array6[1]), 0.5f);
                        array6[3] = default(Tom);
                    }
                    else
                    {
                        array6[2] = Tom.smethod_1(Tom.smethod_2(Tom.smethod_0(2f, array6[0]), array6[1]), 0.333333343f);
                        array6[3] = Tom.smethod_1(Tom.smethod_2(array6[0], Tom.smethod_0(2f, array6[1])), 0.333333343f);
                    }
                    for (var num9 = 0; num9 < 4; num9++)
                    {
                        for (var num10 = 0; num10 < 4; num10++)
                        {
                            if (j + num10 < num2 && i + num9 < num)
                            {
                                var point = new Point(j + num10, i + num9);
                                var num11 = @struct.Uint0 & 3u;
                                if (imgpixelFormat0 == ImgPixelFormat.Dxt1)
                                {
                                    class2190.method_6(point,
                                                       Color.FromArgb((byte)(array6[(int)((UIntPtr)num11)].Float0 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float1 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float2 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float3 * 255f)));
                                }
                                else
                                {
                                    class2190.method_6(point,
                                                       Color.FromArgb((byte)(array[num9 * 4 + num10].Float0 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float1 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float2 * 255f),
                                                                      (byte)(array6[(int)((UIntPtr)num11)].Float3 * 255f)));
                                }
                            }
                            @struct.Uint0 >>= 2;
                        }
                    }
                }
            }
        }