C# 保存在picturebox中的图像不显示预览

C# 保存在picturebox中的图像不显示预览,c#,C#,您好,我是C#的新手,使用menustrip将图像加载到图片框中,并使用picturebox#油漆和标签显示一些文本。现在,我尝试从menustrip使用save事件保存图像(包括图像和文本)。在保存的位置,文件显示为无预览可用,当我试图打开文件时,它显示内存不足 谁能说我要去哪里 我的大衣 private void openToolStripMenuItem_Click(object sender, EventArgs e) { string file = ""; OpenFD

您好,我是C#的新手,使用menustrip将图像加载到图片框中,并使用picturebox#油漆和标签显示一些文本。现在,我尝试从menustrip使用save事件保存图像(包括图像和文本)。在保存的位置,文件显示为无预览可用,当我试图打开文件时,它显示内存不足

谁能说我要去哪里

我的大衣

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    string file = "";
    OpenFD.FileName = "";
    OpenFD.Title = "open image";
    OpenFD.InitialDirectory = "C";
    OpenFD.Filter = "JPEG|*.jpg|Bmp|*.bmp|All Files|*.*.*";
    if (OpenFD.ShowDialog() == DialogResult.OK)
    {
        file = OpenFD.FileName;
        pictureBox1.Image = Image.FromFile(file);
        sz = pictureBox1.Size;
        a=sz.Width; b= sz.Height;
    }


private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
     switch (e.Button)
     {
         case MouseButtons.Left:
         {
             rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);
             this.Invalidate();
             y = flag.e;
             Application.DoEvents();
             break;   
         }

       }
  }

  private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
  {
      rect = new Rectangle(e.X, e.Y, 0, 0);
      this.Invalidate();
  }

  private void pictureBox1_Paint(object sender, PaintEventArgs e)
  {
      using (Pen pen = new Pen(Color.Red, 2))                        e.Graphics.DrawRectangle(pen, rect);
      //e.Graphics.DrawString(label1.Text, label1.Font, new 
       // SolidBrush(label1.ForeColor), label1.Left - pictureBox1.Left, label1.Top - pictureBox1.Top);

        if (label1.TextAlign == ContentAlignment.TopLeft)
        {
            e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), label1.Bounds);
        }
        else if (label1.TextAlign == ContentAlignment.TopCenter)
        {
            SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font);
            float left = ((float)this.Width + label1.Left) / 2 - size.Width / 2;
                    RectangleF rect1 = new RectangleF(left, (float)label1.Top, size.Width, label1.Height);
            e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), rect1);
        }
        else
        {
             SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font);
             float left = (float)label1.Width - size.Width + label1.Left;
             RectangleF rect1 = new RectangleF(left, (float)label1.Top, size.Width, label1.Height);
             e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), rect1);
         }

         label1.Top = rect.Top; label1.Left = rect.Left; label1.Width = rect.Width; 
         label1.Height = rect.Height; 
  }

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
     SaveFileDialog SaveFD1 = new SaveFileDialog();
     //string Sd_file = "";
     SaveFD1.FileName = "";
     SaveFD1.InitialDirectory = "C";
     SaveFD1.Title = "save file Name";
     SaveFD1.Filter= "JPG|*.jpg|Bmp|*.bmp";
     if (SaveFD1.ShowDialog() != DialogResult.Cancel)
     {
         System.IO.Stream filename = (System.IO.FileStream)SaveFD1.OpenFile();
         if (SaveFD1.Filter == "JPG")
                      pictureBox1.Image.Save(SaveFD1.FileName);
                    //pictureBox1.Image.Save (filename, System.Drawing.Imaging.ImageFormat.Jpeg);
          else if (SaveFD1.Filter == "Bmp")
          {
          //pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);
          }
          filename.Close();                                   
      }
  }

下面的代码将绘制一个透明的矩形,其中包含运行时给定的文本

Image bac;
Bitmap myBitmap;
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
    if (mybitmap == null)
    {
        mybitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height, pictureBox1.CreateGraphics());
    }

    rect = new Rectangle(e.X, e.Y, 0, 0);
    this.Invalidate();
}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.Left:
        {
            rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);
            this.Invalidate();
            break;
        }
    }
}

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (mybitmap == null)
    {
        return;
    }

    using (Pen pen = new Pen(Color.Red, 2))
    {
        using (Graphics g = Graphics.FromImage(mybitmap))
        {
            e.Graphics.DrawRectangle(pen, rect);

            if (label1.TextAlign == ContentAlignment.TopLeft)
            {
                e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), label1.Bounds); 
                g.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), label1.Bounds);
            }
            else if (label1.TextAlign == ContentAlignment.TopCenter)
            {
                SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font);
                float left = ((float)this.Width + label1.Left) / 2 - size.Width / 2;
                RectangleF rect1 = new RectangleF(left, (float)label1.Top, size.Width, label1.Height);
                e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), rect1);
            }
            else
            {
                SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font);
                float left = (float)label1.Width - size.Width + label1.Left;
                RectangleF rect1 = new RectangleF(left, (float)label1.Top, size.Width, label1.Height);
                e.Graphics.DrawString(label1.Text, label1.Font, new SolidBrush(label1.ForeColor), rect1);
            }
       }
    }
}

private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (mybitmap != null)
    {
        SaveFileDialog SaveFD1 = new SaveFileDialog();
        SaveFD1.FileName = "";
        SaveFD1.InitialDirectory = "C";
        SaveFD1.Title = "save file Name";
        SaveFD1.Filter = "JPG|*.jpg|Bmp|*.bmp";
        if (SaveFD1.ShowDialog() == DialogResult.OK)
        {
            System.IO.Stream filename = (System.IO.FileStream)SaveFD1.OpenFile();

            int r = SaveFD1.FileName.Length;
            for (int r1 = 0; r1 <= r; )
            {
                if (SaveFD1.FileName[r1] != '.')
                    r1++;
                else
                {
                    r = r1;
                    break;
                }
            }

            if (SaveFD1.FileName[++r] == 'j')
            {
                using (Graphics g = Graphics.FromImage(bac))
                {
                    g.DrawImage(mybitmap, 0, 0);
                }
                bac.Save(filename, ImageFormat.Jpeg);
            }
            else if (SaveFD1.FileName[r] == 'b')
            {
                using (Graphics g = Graphics.FromImage(bac))
                {
                    g.DrawImage(mybitmap, 0, 0);
                }
                bac.Save(filename, ImageFormat.Jpeg);
            }
            else
            {
                using (Graphics g = Graphics.FromImage(bac))
                {
                    g.DrawImage(mybitmap, 0, 0);
                }
                bac.Save(filename, ImageFormat.Png);
            }
            filename.Close();
        }
    }
}

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    OpenFD.FileName = "";
    OpenFD.Title = "open image";
    OpenFD.InitialDirectory = "C";
    OpenFD.Filter = "JPEG|*.jpg|Bmp|*.bmp|All Files|*.*.*";
    if (OpenFD.ShowDialog() == DialogResult.OK)
    {
        file = OpenFD.FileName;

        bac = Image.FromFile(file);
        pictureBox1.Image = bac;
        pictureBox1.Invalidate();
    }
}
Image-bac;
位图;
私有void pictureBox1\u MouseDown(对象发送方,MouseEventArgs e)
{
如果(mybitmap==null)
{
mybitmap=新位图(pictureBox1.Width,pictureBox1.Height,pictureBox1.CreateGraphics());
}
rect=新矩形(e.X,e.Y,0,0);
这个。使无效();
}
私有void pictureBox1\u MouseMove(对象发送方,MouseEventArgs e)
{
开关(e.按钮)
{
case鼠标按钮。左:
{
rect=新矩形(rect.Left,rect.Top,e.X-rect.Left,e.Y-rect.Top);
这个。使无效();
打破
}
}
}
私有void pictureBox1_Paint(对象发送方,PaintEventArgs e)
{
如果(mybitmap==null)
{
回来
}
使用(钢笔=新钢笔(颜色:红色,2))
{
使用(Graphics g=Graphics.FromImage(mybitmap))
{
e、 绘图矩形(钢笔、矩形);
如果(label1.TextAlign==ContentAlignment.TopLeft)
{
e、 Graphics.DrawString(label1.Text,label1.Font,新SolidBrush(label1.ForeColor),label1.Bounds);
g、 DrawString(label1.Text,label1.Font,新SolidBrush(label1.ForeColor),label1.Bounds);
}
else if(label1.TextAlign==ContentAlignment.TopCenter)
{
SizeF size=e.Graphics.MeasureString(label1.Text,label1.Font);
float left=((float)this.Width+label1.left)/2-size.Width/2;
矩形F rect1=新矩形F(左,(浮动)标签1.Top,大小.宽度,标签1.Height);
e、 Graphics.DrawString(label1.Text,label1.Font,新SolidBrush(label1.ForeColor),rect1);
}
其他的
{
SizeF size=e.Graphics.MeasureString(label1.Text,label1.Font);
float left=(float)label1.Width-size.Width+label1.left;
矩形F rect1=新矩形F(左,(浮动)标签1.Top,大小.宽度,标签1.Height);
e、 Graphics.DrawString(label1.Text,label1.Font,新SolidBrush(label1.ForeColor),rect1);
}
}
}
}
私有void saveToolStripMenuItem\u单击(对象发送者,事件参数e)
{
如果(mybitmap!=null)
{
SaveFileDialog SaveFD1=新建SaveFileDialog();
SaveFD1.FileName=“”;
SaveFD1.InitialDirectory=“C”;
SaveFD1.Title=“保存文件名”;
SaveFD1.Filter=“JPG |*.JPG | Bmp |*.Bmp”;
if(SaveFD1.ShowDialog()==DialogResult.OK)
{
System.IO.Stream filename=(System.IO.FileStream)SaveFD1.OpenFile();
int r=SaveFD1.FileName.Length;

对于(int r1=0;r1)任何一个可以回答这个问题吗。。。