C#PictureBox.SizeMode =分配新的图像放大时,不重绘(C# PictureBox

2019-10-29 14:32发布

我的工作,其采用ONVIF央视项目。 我使用的是WinForm的样品,这是由“ONVIF设备管理器”项目提供的,从摄像头获取的视频帧。 (你可以找到它在这里 ),如果我连接到一个摄像头,可以是工作的罚款。 但是,如果我连接多达6个摄像头的一些图片框不,当我在并条机分配新的图像重绘()。 两个矩形包含在所附的图片中的红色椭圆都应该显示图像。 当图片框大小模式是变焦此问题只发生。 正如我已经尽力了,如果我叫Application.DoEvent(这些图片框只能重绘),或致电PictureBox.Update()/刷新()每次当我设置一个新的形象的时间。

在附加的图片两个红色椭圆应该以显示图像

private void DrawFrame(VideoBuffer videoBuffer, PlaybackStatistics statistics)
{
    Bitmap bmp = img as Bitmap;
    BitmapData bd = null;
    try
    {
        bd = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);//bgra32

        using (var md = videoBuffer.Lock())
        {

            CopyMemory(bd.Scan0, md.value.scan0Ptr, videoBuff.stride * videoBuff.height);

            //bitmap.WritePixels(
            //    new Int32Rect(0, 0, videoBuffer.width, videoBuffer.height),
            //    md.value.scan0Ptr, videoBuffer.size, videoBuffer.stride,
            //    0, 0
            //);
        }

    }
    catch (Exception err)
    {
        //errBox.Text = err.Message;
        Debug.Print("DrawFrame:: " + err.Message);
    }
    finally
    {
        bmp.UnlockBits(bd);
    }
    imageBox.Image = bmp;
    /*Application.DoEvent() // not recommended since this method causes the current thread to be suspended
    or call imageBox.Update() // causes hanging on UI thread
    or imageBox.Refresh() // causes hanging on UI thread
    or PictureBox.Invalidate(), do nothing.*/
}

我创建图片框,并添加到面板下面这段代码。

PictureBox ptBox = new PictureBox();
ptBox.Size = new Size(elementWidth, elementHeight);
ptBox.Name = "PictureBox_" + (j) + (i);
ptBox.Location = new Point(j * elementWidth, i * elementHeight); //relative location
ptBox.BorderStyle = BorderStyle.FixedSingle;
ptBox.SizeMode = PictureBoxSizeMode.Zoom;
mPanel.Controls.Add(ptBox);

一个星期后,我发现PictureBoxs发生错误不会触发的OnPaint(PaintEventArgs的E)事件。 这导致了错误的新图像不重绘。

文章来源: C# PictureBox.SizeMode = Zoom does not redraw when assigning new images