如何仅保存从我的图片框中显示的图像

Posted

技术标签:

【中文标题】如何仅保存从我的图片框中显示的图像【英文标题】:How to save only the image that is showing from my picturebox 【发布时间】:2015-09-04 02:38:20 【问题描述】:

我试图弄清楚如何保存从图片框控件显示的视频的快照。我已经可以保存图像文件,但是我的问题是我的相机“看到”的整个图像是正在保存的图像。我要保存的是仅从我的图片框控件显示的图像,这只是相机正在捕获的一部分。顺便说一句,我正在使用 Aforge 框架集的视频库。

我的图片框设置为 Height = 400Width = 400

这是我的代码示例

private void Form1_Load(object sender, EventArgs e)
    
        videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
        foreach (FilterInfo device in videoDevices)
        
            drvrlist.Items.Add(device.Name);
        
        drvrlist.SelectedIndex = 1;

        videosource = new VideoCaptureDevice();

        if (videosource.IsRunning)
        
            videosource.Stop();
        
        else
        
            videosource = new VideoCaptureDevice(videoDevices[comboBox1.SelectedIndex].MonikerString);
            videosource.NewFrame += new NewFrameEventHandler(videosource_NewFrame);
            videosource.Start();
        
    

    private void startbtn_Click(object sender, EventArgs e)
    
        if (videosource.IsRunning)
        
            videosource.Stop();
        
        else
        
            videosource = new VideoCaptureDevice(videoDevices[drvrlist.SelectedIndex].MonikerString);
            videosource.NewFrame += new NewFrameEventHandler(videosource_NewFrame);
            videosource.Start();
        
    

    private void videosource_NewFrame(object sender, NewFrameEventArgs eventArgs)
    
        pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();
        //throw new NotImplementedException();
    

    private void save_btn_Click(object sender, EventArgs e)
    
        SaveFileDialog savefilediag = new SaveFileDialog();
        savefilediag.Filter = "Portable Network Graphics|.png";
        if(savefilediag.ShowDialog()== System.Windows.Forms.DialogResult.OK)
        
            if (pictureBox1.Image != null)
            
                //Save First
                Bitmap varBmp = new Bitmap(pictureBox1.Image);
                Bitmap newBitmap = new Bitmap(varBmp);
                varBmp.Save(savefilediag.FileName, ImageFormat.Png);
                //Now Dispose to free the memory
                varBmp.Dispose();
                varBmp = null;
                pictureBox1.Image = null;
                pictureBox1.Invalidate();
            
            else
             MessageBox.Show("null exception"); 
        
    

【问题讨论】:

【参考方案1】:

您可以使用 Clone 方法用图像的子空间覆盖图片框图像的实例。

        Bitmap varBmp = new Bitmap(pictureBox1.Image);
        varBmp = varBmp.Clone(new RectangleF(0, 0, 400, 400), varBmp.PixelFormat);

从那里,您可以继续并将其保存到文件中。

        varBmp.Save(savefilediag.FileName, ImageFormat.Png);

【讨论】:

工作就像一个魅力。非常感谢

以上是关于如何仅保存从我的图片框中显示的图像的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获图片框中的图像并使其可以在c#应用程序中下载?

如何通过iphone中的sqlite获取路径来显示文档目录中保存的图像

如何在图片框中拖放图像[关闭]

从我的相机应用程序拍照后,图片未保存到图库

更改图像路径后面的数据 - jquery 仅显示旧图像

保存网络浏览器中显示的图像