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); } } }
public PackageFile(string FolderPath) { VtfLib.vlInitialize(); LoadFolder(FolderPath); }