Мне нужно отображать изображения в картинке. Изображения - это сканирование с высоким разрешением архивов. Из-за этого высокого разрешения мои функции панорамирования и масштабирования очень медленные. Чтобы решить эту проблему, я уменьшил ширину и длину растрового изображения, сохраняя читаемые изображения. В моем коде в 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». Как это может быть?