C # GDI + / System.Drawing.Graphics - создание буфера и ручное копирование?

Я создаю программу просмотра файлов cad, которая работает с очень большими файлами изображений, и я пытаюсь оптимизировать ее для получения как можно более высокой частоты кадров и минимального использования памяти.

Он использует GDI + для рендеринга на панели.

Его текущий недостаток - рендеринг изображений. В некоторых файлах я использую эталонные изображения, которые особенно большие (8000x8000 пикселей). Я оптимизировал использование памяти, загружая их только тогда, когда они становятся видимыми, и удаляя их, когда их нет. Это снижает вероятность того, что программе не хватит памяти, но предотвращает слишком частую загрузку и выгрузку изображений; однако рендеринг самих изображений (context.DrawImage) по-прежнему сопряжен с очень большими накладными расходами.

Сейчас я изучаю способы копирования изображений в некоторый буфер меньшего размера, рендеринг этого (обычно гораздо меньшего) буфера, а затем его обновление / восстановление при значительном изменении уровня масштабирования.

Проблема в том, что я не могу найти для этого никаких условий в GDI. Может ли кто-нибудь подсказать, как я могу этого добиться?

7
задан David Rutten 26 November 2011 в 10:45
поделиться