예제 #1
0
파일: Program.cs 프로젝트: Tsohg/texconvert
        /// <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();
        }
예제 #2
0
        /// <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;
            }
        }