【问题标题】:How load image with backgroundworker and display to picturebox?如何使用 backgroundworker 加载图像并显示到图片框?
【发布时间】:2016-08-25 17:05:50
【问题描述】:

我必须在图片框中显示图像。这些图像是档案的高分辨率扫描。由于这种高分辨率,我的平移和缩放功能非常慢。为了解决这个问题,我减少了位图的宽度和长度,同时保持图像的可读性。在我的代码中 drawOriginalImage();因此,变量“质量”是我减小位图大小的因素。我就是这样做的:

private void drawOriginalImage(int quality) {
    try {
        int x = originalImage.Width / quality, 
            y = originalImage.Height / quality;
        pictureBox.Image = (Image)new Bitmap(originalImage, x, y);
        pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
    }
    catch (Exception ex) {
        throw ex;
    }
}

但是这个解决方案带来了另一个问题。这一步可能很长:

pictureBox.Image = (Image)new Bitmap(originalImage, x, y);

由于速度较慢,我想使用 Backgroundworker 功能处理此步骤。现在我的代码如下所示:

private void drawOriginalImage(int quality) {
    Cursor = Cursors.AppStarting;
    backgroundWorker.RunWorkerAsync(new Point(
        originalImage.Width / quality,
        originalImage.Height / quality
    ));
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) {
    Point p = (Point)e.Argument;
    e.Result = new Bitmap(originalImage, p.X, p.Y);
}
private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
    if (e.Error != null) {
        MessageBox.Show("Image too big.\nOriginal error:\n" + e.Error);
    }
    else {
        pictureBox.Image = (Image)e.Result;
        pictureBox.SizeMode = PictureBoxSizeMode.Zoom;
        Cursor = Cursors.Default;
    }
}

但它不起作用。我看到光标从“Cursors.AppStarting”变为“Cursors.Default”,因此任务可能已完成。但是我的图片框中没有图像?这个怎么可能?我做错了什么?

当我调试它时,程序永远不会进入“backgroundWorker_RunWorkerCompleted”。怎么可能?

【问题讨论】:

    标签: c# winforms bitmap backgroundworker picturebox


    【解决方案1】:

    我找到了。通过添加以下内容,我已经正确连接了所有事件:

    backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
    backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
    

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2014-12-17
      • 2010-12-06
      相关资源
      最近更新 更多