我正在使用Winforms和C#创建一个简单的图像查看器和编辑器,但我遇到了一个我认为可能在此函数中的问题;
/// <summary>
/// Extracts image details from specified image file.
/// </summary>
/// <param name="BitmapName">The name of file to process.</param>
/// <param name="ImageName">The TextBox to recieve image name.</param>
/// <param name="ImageCreated">The TextBox to recieve image creation date.</param>
/// <param name="Size">The TextBox to recieve image size.</param>
/// <param name="Width">The TextBox to recieve image width.</param>
/// <param name="Height">The TextBox to recieve image height.</param>
/// <param name="HResolution">The TextBox to recieve image's Horizontal Resolution.</param>
/// <param name="VResolution">The TextBox to recieve image's Vertical Resolution.</param>
/// <param name="Type">The TextBox to recieve the type of image.</param>
/// <param name="Preview">The PictuteBox to display this image as a preview.</param>
public void GetImageData(string BitmapName, TextBox ImageName, TextBox ImageCreated, TextBox Size, TextBox Width, TextBox Height, TextBox HResolution, TextBox VResolution, TextBox Type, PictureBox Preview)
{
try
{
FileInfo fileinfo = new FileInfo(BitmapName);
ImageName.Text = fileinfo.Name;
ImageCreated.Text = fileinfo.CreationTime.ToString();
Size.Text = (fileinfo.Length / 1024).ToString() + " Kilobytes";
Image image = Image.FromFile(BitmapName);
Bitmap Bit = new Bitmap(image);
Height.Text = Bit.Height.ToString() + " px";
Width.Text = Bit.Width.ToString() + " px";
HResolution.Text = Bit.HorizontalResolution.ToString() + " dpi";
VResolution.Text = Bit.VerticalResolution.ToString() + " dpi";
if (fileinfo.Extension == ".bmp" || fileinfo.Extension == ".BMP")
{
Type.Text = "Bitmap Image";
}
else if (fileinfo.Extension == ".jpeg" || fileinfo.Extension == ".JPEG")
{
Type.Text = "Jpeg Image";
}
else if (fileinfo.Extension == ".jpg" || fileinfo.Extension == ".JPG")
{
Type.Text = "Jpg Image";
}
else if (fileinfo.Extension == ".png" || fileinfo.Extension == ".PNG")
{
Type.Text = "Png Image";
}
else if (fileinfo.Extension == ".gif" || fileinfo.Extension == ".GIF")
{
Type.Text = "GIF Image";
}
Preview.Image = image;
Bit.Dispose();
}
catch (OutOfMemoryException)
{
Preview.Image = Properties.Resources.InvalidImage;
}
}
,此功能使用Bitmap类提取图像细节,但在查看20-30张图像后,它使用了近600-700 MB RAM。请告诉我哪里出错了。
答案 0 :(得分:2)
在更改之前,您不会处理Preview.Image,请尝试以下操作:
public void GetImageData(string BitmapName, TextBox ImageName, TextBox ImageCreated, TextBox Size, TextBox Width, TextBox Height, TextBox HResolution, TextBox VResolution, TextBox Type, PictureBox Preview)
{
try
{
FileInfo fileinfo = new FileInfo(BitmapName);
ImageName.Text = fileinfo.Name;
ImageCreated.Text = fileinfo.CreationTime.ToString();
Size.Text = (fileinfo.Length / 1024).ToString() + " Kilobytes";
Image image = Image.FromFile(BitmapName);
using (Bitmap Bit = new Bitmap(image))
{
Height.Text = Bit.Height.ToString() + " px";
Width.Text = Bit.Width.ToString() + " px";
HResolution.Text = Bit.HorizontalResolution.ToString() + " dpi";
VResolution.Text = Bit.VerticalResolution.ToString() + " dpi";
if (fileinfo.Extension == ".bmp" || fileinfo.Extension == ".BMP")
{
Type.Text = "Bitmap Image";
}
else if (fileinfo.Extension == ".jpeg" || fileinfo.Extension == ".JPEG")
{
Type.Text = "Jpeg Image";
}
else if (fileinfo.Extension == ".jpg" || fileinfo.Extension == ".JPG")
{
Type.Text = "Jpg Image";
}
else if (fileinfo.Extension == ".png" || fileinfo.Extension == ".PNG")
{
Type.Text = "Png Image";
}
else if (fileinfo.Extension == ".gif" || fileinfo.Extension == ".GIF")
{
Type.Text = "GIF Image";
}
if (Preview.Image != null)
Preview.Image.Dispose();
Preview.Image = image;
}
}
catch (OutOfMemoryException)
{
Preview.Image = Properties.Resources.InvalidImage;
}
}
答案 1 :(得分:0)
你不处理图像,只使用位图
bit = new Bitmap(filename);
加载图片广告位图。