mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-23 16:34:33 +00:00
ImageExtensions - Add ReleaseFromFile to not keep file handle open
This commit is contained in:
@@ -31,6 +31,13 @@ namespace PckStudio.Extensions
|
||||
{
|
||||
internal static class ImageExtensions
|
||||
{
|
||||
internal static Image ReleaseFromFile(this Image image)
|
||||
{
|
||||
Image img = new Bitmap(image);
|
||||
image.Dispose();
|
||||
return img;
|
||||
}
|
||||
|
||||
internal static Image GetArea(this Image source, Rectangle area)
|
||||
{
|
||||
Image tileImage = new Bitmap(area.Width, area.Height);
|
||||
|
||||
@@ -321,7 +321,7 @@ namespace PckStudio.Forms.Editor
|
||||
}
|
||||
try
|
||||
{
|
||||
var img = Image.FromFile(textureFile);
|
||||
var img = Image.FromFile(textureFile).ReleaseFromFile();
|
||||
JObject mcmeta = JObject.Parse(File.ReadAllText(fileDialog.FileName));
|
||||
Animation javaAnimation = AnimationHelper.GetAnimationFromJavaAnimation(mcmeta, img);
|
||||
javaAnimation.Category = _animation.Category;
|
||||
@@ -447,7 +447,7 @@ namespace PckStudio.Forms.Editor
|
||||
if (fileDialog.ShowDialog(this) != DialogResult.OK)
|
||||
return;
|
||||
|
||||
var gif = Image.FromFile(fileDialog.FileName);
|
||||
var gif = Image.FromFile(fileDialog.FileName).ReleaseFromFile();
|
||||
if (!gif.RawFormat.Equals(ImageFormat.Gif))
|
||||
{
|
||||
MessageBox.Show("Selected file is not a gif", "Invalid file", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
@@ -477,7 +477,7 @@ namespace PckStudio.Forms.Editor
|
||||
};
|
||||
if (ofd.ShowDialog() != DialogResult.OK)
|
||||
return;
|
||||
Image img = Image.FromFile(ofd.FileName);
|
||||
Image img = Image.FromFile(ofd.FileName).ReleaseFromFile();
|
||||
var textures = img.Split(ImageLayoutDirection.Vertical);
|
||||
_animation = new Animation(textures, string.Empty);
|
||||
LoadAnimationTreeView();
|
||||
|
||||
@@ -140,9 +140,7 @@ namespace PckStudio.Forms.Editor
|
||||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
generateTextureCheckBox.Checked = false;
|
||||
// use stream to not leave handle open
|
||||
using (var imgFs = File.OpenRead(openFileDialog.FileName))
|
||||
renderer3D1.Texture = Image.FromStream(imgFs);
|
||||
renderer3D1.Texture = Image.FromFile(openFileDialog.FileName).ReleaseFromFile();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ namespace PckStudio.Popups
|
||||
OpenFileDialog ofd = new OpenFileDialog();
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
SetNewTexture(Image.FromFile(ofd.FileName));
|
||||
SetNewTexture(Image.FromFile(ofd.FileName).ReleaseFromFile());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,7 +154,9 @@ namespace PckStudio.Popups
|
||||
textSkinName.Text = Path.GetFileNameWithoutExtension(ofd.FileName);
|
||||
return;
|
||||
}
|
||||
SetNewTexture(Image.FromFile(ofd.FileName));
|
||||
|
||||
var img = Image.FromFile(ofd.FileName).ReleaseFromFile();
|
||||
SetNewTexture(img);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -179,13 +181,13 @@ namespace PckStudio.Popups
|
||||
ofd.Title = "Select a PNG File";
|
||||
if (ofd.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
var img = Image.FromFile(ofd.FileName);
|
||||
var img = Image.FromFile(ofd.FileName).ReleaseFromFile();
|
||||
if (img.RawFormat != ImageFormat.Png && img.Width != img.Height * 2)
|
||||
{
|
||||
MessageBox.Show("Not a Valid Cape File");
|
||||
return;
|
||||
}
|
||||
newSkin.CapeTexture = capePictureBox.Image = Image.FromFile(ofd.FileName);
|
||||
newSkin.CapeTexture = capePictureBox.Image = img;
|
||||
contextMenuCape.Items[0].Text = "Replace";
|
||||
capeLabel.Visible = false;
|
||||
contextMenuCape.Visible = true;
|
||||
|
||||
@@ -1961,7 +1961,7 @@ namespace PckStudio
|
||||
PckFileData MipMappedFile = new PckFileData(mippedPath, PckFileType.TextureFile);
|
||||
|
||||
|
||||
Image originalTexture = Image.FromStream(new MemoryStream(file.Data));
|
||||
Image originalTexture = file.GetTexture();
|
||||
int NewWidth = Math.Max(originalTexture.Width / (int)Math.Pow(2, i - 1), 1);
|
||||
int NewHeight = Math.Max(originalTexture.Height / (int)Math.Pow(2, i - 1), 1);
|
||||
|
||||
@@ -2011,12 +2011,9 @@ namespace PckStudio
|
||||
saveFileDialog.DefaultExt = ".3dst";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
using (var ms = new MemoryStream(file.Data))
|
||||
{
|
||||
Image img = Image.FromStream(ms);
|
||||
var writer = new _3DSTextureWriter(img);
|
||||
writer.WriteToFile(saveFileDialog.FileName);
|
||||
}
|
||||
Image img = file.GetTexture();
|
||||
var writer = new _3DSTextureWriter(img);
|
||||
writer.WriteToFile(saveFileDialog.FileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user