그래픽입니다.DrawImage 지 않는 항상 전체를 페인트 비트맵?
문제
로 이 문제가 사용하는 경우 Graphics.DrawImage
.
사용하는 경우 e.Graphics.DrawImage(Image, Point)
에 OnPaint
페인트 비트맵'버퍼에'제어,그것은 나타나는 부분의 이미지는 생략합니다.버퍼가 채워에서 도우미는 방법에 직접 그리는 Bitmap
를 사용하여 Graphics
건설습니다.컨트롤 페인트,캐시된 비트맵에 그려진 제어합니다.
아무것도 나타나 생략될에는 비트맵 자체이기 때문에,나는 때 저장된 비트맵 디스크 및 검사 그것은,그것을 이내의 거리에 있습니다.더 보기(아래 이미지 참조)
이것은 무엇을 비트맵 버퍼처럼 보인:
(출처: zachjohnson.net)
이에 나타나는 것을 제어:
(출처: zachjohnson.net)
이 모든 것은 내가 하기에 OnPaint
:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.bufferInvalid)
{
this.UpdateBuffer();
}
if (this.buffer != null)
{
e.Graphics.DrawImage(this.buffer, Point.Empty);
}
}
해결책
onpaint가 호출되면 Windows에는 유효하지 않은 영역이 있으며 그림을 그릴 수 있으며 다른 모든 것이 잘립니다. 직사각형 컨트롤을 업데이트하려면 Windows API에서 Invalidaterect를 호출하여 전체 사각형이 유효하지 않은 영역의 일부인지 확인해야합니다. onpaint는 유효하지 않은 컨트롤의 일부가있을 때마다 자동으로 호출됩니다.
다른 팁
시도할 수 있습니다 몇 가지가 있습니다.
- 게시 코드를"UpdateBuffer"
- 할 bitmap.저장(i.e버퍼입니다.저장)후 updatebuffer 전화 및 무엇인지 확인트맵과 같습니다.
- 모든 컨트롤이 그려진 것이 없어되는 그린 투명한 등등....
- 코드의"같은 메소드를 사용하"및"버퍼 업데이트"그리고 별도의 프로젝트는 테스트를 작동하는지 확인합니다.
- take out"base.같은 메소드를 사용하"그리고 어떻게되는지 확인
- 도 호출 bitmap.drawimageunscaled 대신 bitmap.drawimage
- 도를 사용하여 새로운 관점(0,0)에 대신 점이다.빈(a 않고 촬영 하지만 나중에 결코 알지 못...)
톤의 옵션을 위해 디버깅이,문제의 축소.
확인하십시오 System.Windows.Forms.ControlStyles.ResizeRedraw
제휴하지 않습니다 StackOverflow