たぶんメモリストリームでどうにか?
private void satellitesToolStripMenuItem_Click(object sender, EventArgs e)
{
file_array_satellite = Directory.GetFiles(UrlsPath, "RainImage*.*");
for (int i = 0; i < file_array_satellite.Length; i++)
{
Image s = new Bitmap(file_array_satellite[i]);
s = resizeImage(s, new Size(100, 100));
s.Save(UrlsPath + "Changed" + i.ToString("D6") + ".jpg");
}
file_array_satellite = Directory.GetFiles(UrlsPath, "Changed*.*");
if (file_array_satellite.Length > 0)
{
DateTime[] creationTimes8 = new DateTime[file_array_satellite.Length];
for (int i = 0; i < file_array_satellite.Length; i++)
creationTimes8[i] = new FileInfo(file_array_satellite[i]).CreationTime;
Array.Sort(creationTimes8, file_array_satellite);
file_indxs_satellite = 0;
file_indxs_satellite = file_array_satellite.Length - 1;
timer1.Enabled = true;
}
}
public static Image resizeImage(Image imgToResize, Size size)
{
return (Image)(new Bitmap(imgToResize, size));
}
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
file_array_satellite = Directory.GetFiles(UrlsPath, "RainImage*.*");
for (int i = 0; i < file_array_satellite.Length; i++)
{
Image s = new Bitmap(file_array_satellite[i]);
s = resizeImage(s, new Size(500, 500));
}
this.pictureBox1.Size = new Size(500, 500);
pictureBox1.Location = new Point(this.Bounds.Width / 3,
this.Bounds.Height / 3);
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.BringToFront();
}
この場合、画像を表示しているpictureBoxのサイズは100,100なので、画像のサイズを100,100に変更してpictureBoxに表示します。次に、pictureBox 領域にマウスを移動すると、pictureBox がフォームの中央に移動し、pictureBox のサイズを 500,500 に変更し、画像のサイズを再び 500,500 に変更して、pictureBox に表示します。
問題は、ハードディスク上の画像サイズの変更/変換に、毎回ほぼ 3 ~ 5 秒かかることです。
サイズ変換を行うより速い方法はありますか?
編集**
現在の表示画像のみのサイズを変更しようとしているコードを変更しましたが、pictureBox1 の画像は現在同じサイズではなく、pictureBox にアニメーションが表示されません。
private void timer1_Tick(object sender, EventArgs e)
{
try
{
Image s = new Bitmap(file_array_satellite[file_indxs_satellite]);
s = resizeImage(s, new Size(100, 100));
pictureBox1.Load(file_array_satellite[file_indxs_satellite]);
file_indxs_satellite = file_indxs_satellite - 1;
if (file_indxs_satellite < 0)
{
file_indxs_satellite = file_array_satellite.Length - 1;
}
}
catch
{
timer1.Enabled = false;
}
}
private void satellitesToolStripMenuItem_Click(object sender, EventArgs e)
{
file_array_satellite = Directory.GetFiles(UrlsPath, "RainImage*.*");
if (file_array_satellite.Length > 0)
{
DateTime[] creationTimes8 = new DateTime[file_array_satellite.Length];
for (int i = 0; i < file_array_satellite.Length; i++)
creationTimes8[i] = new FileInfo(file_array_satellite[i]).CreationTime;
Array.Sort(creationTimes8, file_array_satellite);
file_indxs_satellite = 0;
file_indxs_satellite = file_array_satellite.Length - 1;
timer1.Enabled = true;
}
}
public static Image resizeImage(Image imgToResize, Size size)
{
return (Image)(new Bitmap(imgToResize, size));
}