Если в вашем коде нет других задержек, которые бы препятствовали повторному входу потока пользовательского интерфейса в цикл сообщений, так что можно вызвать метод OnPaint (): ваш обработчик событий Paint вызывается после PictureBoxнарисовал изображение.Это еще не видно, PB использует двойную буферизацию.
Это изображение становится дорогим для рисования, когда его нужно изменить в соответствии с клиентской областью PB.Что очень вероятно в вашем случае, потому что ваши изображения довольно большие.Он использует высококачественный бикубический фильтр, чтобы изображение с измененным размером выглядело хорошо.Это довольно дорого, хотя результат и хороший.
Чтобы избежать этих затрат, измените размер изображения самостоятельно, прежде чем присваивать его свойству Image.Сделайте его таким же большим, как ClientSize PB.
Это само по себе будет иметь большое значение.Следующее, что вы можете сделать, это создать масштабированное растровое изображение с пиксельным форматом 32bppPArgb.Этот формат примерно в 10 раз быстрее, чем любой другой, потому что он соответствует видеоадаптеру на большинстве компьютеров, поэтому преобразование формата пикселей не требуется.
Некоторый код:
private void loadImage(string path) {
using (var srce = new Bitmap(path)) {
var dest = new Bitmap(pictureBox1.Width, pictureBox1.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
using (var gr = Graphics.FromImage(dest)) {
gr.DrawImage(srce, new Rectangle(Point.Empty, dest.Size));
}
if (pictureBox1.Image != null) pictureBox1.Dispose();
pictureBox1.Image = dest;
}
}
Вы, вероятно,хочу повозиться с этим, чтобы изображение сохранило свое соотношение сторон.Попробуйте сначала как есть, чтобы убедиться, что вы получите улучшение перф.