StrechBlt не работает - PullRequest
       1

StrechBlt не работает

0 голосов
/ 21 июля 2011
protected override void OnPaint(PaintEventArgs e)
{
      Win32Helper.StretchBlt(this.Handle, 0, 0, 200, 300,bitmap.GetHbitmap(), 0, 0, bitmap.Width, bitmap.Height, Win32Helper.TernaryRasterOperations.SRCCOPY);
      this.CreateGraphics().DrawRectangle(new Pen(Color.Black), 0, 0, 100, 100);           

    base.OnPaint(e);
}

Прямоугольник нарисован .. Но растровое изображение не ... Я установил picturebox1.Image=bitmap и работает так, что растровое изображение не пусто ... Есть идеи, что я делаю не так?Я в компактных рамках.

1 Ответ

1 голос
/ 22 июля 2011

Я не уверен, что такое "this.Handle", но это может быть не дескриптор DC. И я подозреваю, что вы теряете ресурсы также с каждым созданием объекта Pen и Graphics. (Сборщик мусора выпустит его в конце концов, но не стоит оставлять эти ручки задерживаться). В любом случае, вместо использования StretchBlt, вы можете просто использовать сам объект Graphics для создания блика изображения.

  protected override void OnPaint(PaintEventArgs e)
  {
      System.Drawing.Graphics g = e.Graphics; // or call your CreateGraphics function
      Pen p = new Pen(Color.Black);

      g.DrawImage(bitmap, 0, 0, 200, 300);
      g.DrawRectangle(p, 0, 0, 100, 100);           

      // cleanup
      p.Dispose();
      // g.Dispose(); Call g.dispose if you allocated it and it didn't come from the PaintEventArgs parameter

      base.OnPaint(e);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...