NETCF - Оптимизированная перекраска (onPaint) - PullRequest
0 голосов
/ 08 июня 2010

Я хочу попросить совета по оптимизации перекраски в Compact Framework?GetHashCode () не помог, потому что он всегда возвращает другой хэш-код.

В любом случае, у меня есть программа, которую вы можете перетаскивать и изменять размер объекта во время выполнения.Этот объект является прозрачным объектом и имеет изображение PNG, которое также динамически изменяет размер относительно размера объекта клиента.

Хотя я заметил, (например, у меня есть 4 прозрачных объекта, и я перетаскиваю или изменяю их размер), все 4 из них вызывают OnPaintBackground, даже если 3 не перемещаются.Еще один, когда я просто нажимаю на один объект .. это вызывает срабатывание onPaintBacground ().В любом случае, у меня нет проблем, когда эти события запускаются.

Что мне нравится делать, так это оптимизация, и это означает, что мне нужно перекрашивать объект только тогда, когда это необходимо.ребята, пожалуйста, дайте предложения?

вот мой псевдо-код C #

Bitmap _backBuff;
onResize() {
   if(_backBuff != null) _backBuff.Dispose();
   _backBuff = new Bitmap(ClientSize.Width, ClientSize.Height);
   Invalidate();
}

onPaintBackground(e) /*have to use onPaintBackground because MSDN said it's faster*/ {
   using(Graphics g = Graphics.FromImage(_backBuff)) {
      g.Clear(Color.Black);

      // draw background
      ....some interface calling here
      ....and paint the background

      // draw alpha PNG
      .. get hDc
      .. paint PNG
      .. release hDc
   }

   e.Graphics.DrawImage(_backBuff,0,0);
}

Заранее спасибо.

1 Ответ

1 голос
/ 08 июня 2010

Есть идея

Я должен проверить новое местоположение или новые различия в размерах между старыми. Если один из них является новым, тогда сделайте перерисовку .. еще .. нарисуйте _backBuff (который действует как изображение кэша).

Я реализовал это, и до сих пор выглядит неплохо с перерисовкой или покраской кеша.

...