【发布时间】:2013-02-14 05:18:34
【问题描述】:
我无法旋转图像。我要旋转的图像大小约为 300kB。当我将它从零度旋转到 360 度时,一次将角度增加一度,出现内存不足异常。它一直工作到 100 度。
这是我的代码:
private void button1_Click(object sender, EventArgs e)
{
this.openFileDialog1.InitialDirectory = System.Environment.SpecialFolder.MyComputer .ToString ();
DialogResult result = this.openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
String pathfile = this.openFileDialog1.FileName ;
meter = Image.FromFile(pathfile);
pictureBox1.Image = meter;
bitmapmeter = new Bitmap(meter);
gmeter = Graphics.FromImage(bitmapmeter);
w = bitmapmeter.Width;
h = bitmapmeter.Height;
}
}
private void button2_Click(object sender, EventArgs e)
{
for (int angle = 0; angle < 360; angle = angle + 1)
{
bitmapmeter = new Bitmap(meter); //create a bitmap for selected image//pictureBox2.Image = bitmapmeter;
gmeter = Graphics.FromImage(bitmapmeter);
rotate(angle);
bitmapmeter.Dispose();
gmeter.Dispose();
}
MessageBox.Show("Finished");
}
Bitmap newBitmap;
Graphics graphics;
private void rotate(int angle)
{
newBitmap = new Bitmap(w, h);
graphics = Graphics.FromImage(newBitmap);
graphics.TranslateTransform((float)bitmapmeter.Width / 2, (float)bitmapmeter.Height / 2);
graphics.RotateTransform(1);
graphics.TranslateTransform(-(float)bitmapmeter.Width / 2, -(float)bitmapmeter.Height / 2);
graphics.DrawImage(bitmapmeter, new Point(0, 0));
newBitmap.Dispose();
graphics.Dispose();
//pictureBox2.Image = bitmapmeter;
}
【问题讨论】:
-
Winforms 会让你在尝试做这些事情时受苦。 WPF will make you happier
-
如果您只需要两个(原始和旋转),为什么要创建 720 个
Bitmap和Graphics实例?当然,你可以拨打GC.Collect(),但最好完全重写代码。 -
您的
rotate方法甚至不返回图像。这甚至像您期望的那样工作吗? -
@NikolayKhil - 他实际上并没有创建 720 个
Bitmap和Graphics实例,它实际上只有 360 个。 -
@NikolayKhil - 我只看到
rotate(int angle)被调用了 360 次。
标签: c# system.drawing