예제 #1
0
        public unsafe Bitmap LoadVTFImage(byte[] lpInput)
        {
            lock (lockThis)
            {
                if (lpInput == null || lpInput.Length == 0)
                {
                    return(null);
                }
                uint uiImage;
                VtfLib.vlCreateImage(&uiImage);
                VtfLib.vlBindImage(uiImage);

                try
                {
                    fixed(byte *lpBuffer = lpInput)
                    {
                        if (!VtfLib.vlImageLoadLump(lpBuffer, (uint)lpInput.Length, false))
                        {
                            throw new FormatException(VtfLib.vlGetLastError());
                        }
                    }

                    byte[] lpImageData = new byte[VtfLib.vlImageComputeImageSize(VtfLib.vlImageGetWidth(), VtfLib.vlImageGetHeight(), 1, 1, VtfLib.ImageFormat.ImageFormatBGRA8888)];
                    fixed(byte *lpOutput = lpImageData)
                    {
                        if (!VtfLib.vlImageConvert(VtfLib.vlImageGetData(0, 0, 0, 0), lpOutput, VtfLib.vlImageGetWidth(), VtfLib.vlImageGetHeight(), VtfLib.vlImageGetFormat(), VtfLib.ImageFormat.ImageFormatBGRA8888))
                        {
                            throw new FormatException(VtfLib.vlGetLastError());
                        }
                        Bitmap b  = new Bitmap((int)VtfLib.vlImageGetWidth(), (int)VtfLib.vlImageGetHeight(), (int)VtfLib.vlImageGetWidth() * 4, System.Drawing.Imaging.PixelFormat.Format32bppArgb, (IntPtr)lpOutput);
                        Bitmap b2 = new Bitmap(b);

                        b.Dispose();
                        b = null;
                        return(b2);
                    }
                }
                finally
                {
                    VtfLib.vlDeleteImage(uiImage);
                }
            }
        }
예제 #2
0
 public PackageFile(string FolderPath)
 {
     VtfLib.vlInitialize();
     LoadFolder(FolderPath);
 }