private void Import_Click(object sender, RoutedEventArgs e)
        {
            UndertaleEmbeddedTexture target = DataContext as UndertaleEmbeddedTexture;

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt = ".png";
            dlg.Filter     = "PNG files (.png)|*.png|All files|*";

            if (dlg.ShowDialog() == true)
            {
                try
                {
                    byte[] data = File.ReadAllBytes(dlg.FileName);

                    // Make sure the file is valid PNG
                    // TODO: does that work?
                    using (var stream = new MemoryStream(data))
                    {
                        PngBitmapDecoder decoder = new PngBitmapDecoder(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                    }

                    target.TextureData.TextureBlob = data;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to import file: " + ex.Message, "Failed to import file", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
        private void Import_Click(object sender, RoutedEventArgs e)
        {
            UndertaleEmbeddedTexture target = DataContext as UndertaleEmbeddedTexture;

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt = ".png";
            dlg.Filter     = "PNG files (.png)|*.png|All files|*";

            if (dlg.ShowDialog() == true)
            {
                try
                {
                    Bitmap bmp;
                    using (var ms = new MemoryStream(TextureWorker.ReadTextureBlob(dlg.FileName)))
                    {
                        bmp = new Bitmap(ms);
                    }
                    bmp.SetResolution(96.0F, 96.0F);
                    using (var stream = new MemoryStream())
                    {
                        bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                        target.TextureData.TextureBlob = stream.ToArray();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to import file: " + ex.Message, "Failed to import file", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
 public Bitmap GetEmbeddedTexture(UndertaleEmbeddedTexture embeddedTexture)
 {
     lock (embeddedDictionary)
     {
         if (!embeddedDictionary.ContainsKey(embeddedTexture))
         {
             embeddedDictionary[embeddedTexture] = GetImageFromByteArray(embeddedTexture.TextureData.TextureBlob);
         }
         return(embeddedDictionary[embeddedTexture]);
     }
 }
Example #4
0
    /// <summary>
    /// Replaces an embedded texture with contents from another file.
    /// </summary>
    /// <param name="textureEntry">Embedded texture to replace</param>
    /// <param name="fileToReplace">File path which should replace the embedded texture.</param>
    private void ReplaceTextureWithFile(string textureEntry, FileInfo fileToReplace)
    {
        UndertaleEmbeddedTexture texture = Data.EmbeddedTextures.ByName(textureEntry);

        if (texture == null)
        {
            Console.Error.WriteLine($"Data file does not contain an embedded texture named {textureEntry}!");
            return;
        }

        if (Verbose)
        {
            Console.WriteLine("Replacing " + textureEntry);
        }

        texture.TextureData.TextureBlob = File.ReadAllBytes(fileToReplace.FullName);
    }
Example #5
0
        private void Import_Click(object sender, RoutedEventArgs e)
        {
            UndertaleEmbeddedTexture target = DataContext as UndertaleEmbeddedTexture;

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt = ".png";
            dlg.Filter     = "PNG files (.png)|*.png|All files|*";

            if (dlg.ShowDialog() == true)
            {
                try
                {
                    Bitmap bmp;
                    using (var ms = new MemoryStream(TextureWorker.ReadTextureBlob(dlg.FileName)))
                    {
                        bmp = new Bitmap(ms);
                    }
                    bmp.SetResolution(96.0F, 96.0F);

                    var width  = (uint)bmp.Width;
                    var height = (uint)bmp.Height;

                    if ((width & (width - 1)) != 0 || (height & (height - 1)) != 0)
                    {
                        mainWindow.ShowWarning("WARNING: texture page dimensions are not powers of 2. Sprite blurring is very likely in game.", "Unexpected texture dimensions");
                    }

                    using (var stream = new MemoryStream())
                    {
                        bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                        target.TextureData.TextureBlob = stream.ToArray();

                        TexWidth.GetBindingExpression(TextBox.TextProperty)?.UpdateTarget();
                        TexHeight.GetBindingExpression(TextBox.TextProperty)?.UpdateTarget();
                    }
                }
                catch (Exception ex)
                {
                    mainWindow.ShowError("Failed to import file: " + ex.Message, "Failed to import file");
                }
            }
        }
        private void Export_Click(object sender, RoutedEventArgs e)
        {
            UndertaleEmbeddedTexture target = DataContext as UndertaleEmbeddedTexture;

            SaveFileDialog dlg = new SaveFileDialog();

            dlg.DefaultExt = ".png";
            dlg.Filter     = "PNG files (.png)|*.png|All files|*";

            if (dlg.ShowDialog() == true)
            {
                try
                {
                    File.WriteAllBytes(dlg.FileName, target.TextureData.TextureBlob);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to export file: " + ex.Message, "Failed to export file", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }
Example #7
0
        private void Import_Click(object sender, RoutedEventArgs e)
        {
            UndertaleEmbeddedTexture target = DataContext as UndertaleEmbeddedTexture;

            OpenFileDialog dlg = new OpenFileDialog();

            dlg.DefaultExt = ".png";
            dlg.Filter     = "PNG files (.png)|*.png|All files|*";

            if (dlg.ShowDialog() == true)
            {
                try
                {
                    target.TextureData.TextureBlob = TextureWorker.ReadTextureBlob(dlg.FileName);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Failed to import file: " + ex.Message, "Failed to import file", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }
        }