/// <summary> /// Converts a single .dds file to .png format. /// </summary> /// <param name="file">Full path of the file.</param> /// <param name="inPath">Full input directory path.</param> /// <param name="outPath">Full output directory path.</param> /// <param name="index">Integer label. Start at i = 1.</param> /// <param name="total">Total number of files to be converted.</param> public void ConvertDdsToPng(string file, string inPath, string outPath, ref int index, int total) { Console.Out.WriteLine("Converting: " + Path.GetFileName(file) + " " + index + "\\" + total); ImageEngineImage imi = new ImageEngineImage(Path.Combine(inPath, file)); //debug //formats.Add(imi.Format); BitmapSource bmps = imi.GetWPFBitmap(0, true); PngBitmapEncoder enc = new PngBitmapEncoder(); enc.Frames.Add(BitmapFrame.Create(bmps)); //FileStream fs = new FileStream(Path.Combine(outPath, Path.ChangeExtension(Path.GetFileName(file), ".png")), FileMode.Create); //String manipulation to remove the .target extension, insert the dds format delimited by '-', and append the new .png extension. string noExt = Path.ChangeExtension(file, ""); noExt = noExt.Remove(noExt.Length - 1); string fNewName = Path.GetFileName(noExt) + "-" + imi.Format.ToString(); string pathNew = Path.Combine(outPath, fNewName); string extNew = pathNew += ".png"; //save file. FileStream fs = new FileStream(extNew, FileMode.Create); enc.Save(fs); fs.Close(); }
/// <summary> /// Loads DdsImage from Data. /// </summary> public void LoadDds() { if (!EepkToolInterlop.LoadTextures) { return; } try { ddsIsLoading = true; byte[] data = Data.ToArray(); int numMipMaps = 0; //PROBLEM: Most files load fine with DDSReader, but it CANT load files that are saved with CSharpImageLibrary. //CSharpImageLibrary may be able to load them on Win7/Win8 machines, but I cant test that... using (var ImageSource = new ImageEngineImage(data)) { DdsImage = new WriteableBitmap(ImageSource.GetWPFBitmap()); ImageFormat = ImageSource.Format.SurfaceFormat; numMipMaps = ImageSource.NumMipMaps; } //If CSharpImageLibrary fails to load the image, then try DDSReader //IMPORTANT: DDSReader CANNOT load files saved by CSharpImageLibrary! //if (DdsImage == null || numMipMaps == 0) //{ // DDSReader.Utils.PixelFormat format; // DdsImage = new WriteableBitmap(DDSReader.DDS.LoadImage(data, out format, true)); // ImageFormat = ImageEngineFormat.DDS_DXT5; //Default to DXT5 //If DdsImage is still null, then the image has failed to load. // if (DdsImage == null) // { // throw new InvalidDataException(string.Format("Unable to parse \"{0}\".", Name)); // } //} } catch { loadDdsFail = true; } finally { loadDds = true; ddsIsLoading = false; } }
public Bitmap GetImage() { return(UsefulThings.WinForms.Imaging.CreateBitmap(image.GetWPFBitmap(), false)); }
public void SetImage(Bitmap bmp) { using (var stream = new MemoryStream()) { bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png); byte[] bytes = stream.ToArray(); image = new ImageEngineImage(bytes); UIManager.Instance.ShowImage(UsefulThings.WinForms.Imaging.CreateBitmap(image.GetWPFBitmap(), false)); } }
////////////////////////////////////////////////////////////////// ///// UI Preparing Operations ////////////////////////////////////////////////////////////////// ///// Manager Operations public void SetImage(string imagePath) { byte[] bytes = null; try { bytes = File.ReadAllBytes(imagePath); image = new ImageEngineImage(bytes); UIManager.Instance.ShowImage(UsefulThings.WinForms.Imaging.CreateBitmap(image.GetWPFBitmap(), false)); } catch (Exception) { LogManager.Instance.MsgError("Cannot load image: " + imagePath); throw; } }