vb.net에서 코드를 사용하여 이미지가 그려진 경우 그림 상자에 이미지를 유지하도록 강요

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

문제

내 그림 박스는 때때로 이미지를 만들 때 또는 때로는 반쯤 지나갈 때 모든 그림이 사라집니다. 도면이 시작되기 전에 gc.collect ()를 호출하면 더 많이 뽑기 전에 더 많이 그려 지지만 어떻게 완전히 지우지 못하게 할 수 있습니까?

이것은 vb.net에 있습니다

감사!

도움이 되었습니까?

해결책

.NET에서 그려진 이미지를 유지하는 쉬운 방법은 도면을 별도의 비트 맵 객체에 수행 한 다음 그림 상자의 이미지 속성을 비트 맵과 동일하게 설정하는 것입니다.

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

죄송합니다. C#이지만 원리를 설명해야합니다.

계속 그려진 이미지를 지속시키는 또 다른 방법은 PictureBox의 페인트 이벤트에서 도면을 수행하는 것이지만, 이는 제어가 자체적으로 다시 칠해야 할 때마다 드로잉 코드가 실행된다는 것을 의미합니다 (다른 양식이 상단 위로 끌릴 때마다 발생합니다). 위의 방법 (컨트롤의 이미지 속성 설정)이 더 간단합니다.

다른 팁

위의 경우 "BMP"또는 "G"객체가 범위를 벗어나 수집 된 경우 PictureBox 이미지가 변경됩니다. 이미지는 항상 참조 복사라고 생각합니다. 이미지를 그림 상자에 복사하기 위해 BMP.Clone을 시도했지만 여전히 BMP가 수집 된 경우 그림 박스 이미지가 사라집니다. 필자의 경우, 런타임 생성 된 PictureBoxes에 할당 할 수있는 여러 이미지 (런타임에 결정)를 여러 가지 (런타임에 결정했습니다).

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top