나는 WinForm
응용 프로그램 '튀는 공'이 있고, 나는 bitmap
에 볼 페인트이 양식에 비트 맵을 제시 할 필요가있다.사용하여 비트 맵
나는 새로운 공을 추가하는 plusButton
을 가지고 있으며, 나는 각각의 새로운 공을리스트에 저장하고 있습니다.
Form_Paint
방법은 자신을 그리는 각각의 볼을 말하고, 여기
내 코드입니다 .. 잘 를 작동
양식 코드의 페인트 방법 :
private void Form1_Paint(object sender, PaintEventArgs e)
{
ballsArray.drawImage(bmp,e, ClientRectangle);
}
참고 :이 클래스가 ballsArray
유형 AllBalls
에서입니다이다 w 그 각 공을 유지하는 목록을 만드는 중입니다. bmp
은 양식을로드 할 때 생성됩니다 (Form_Load()
메소드). ballsArray
코드의
의 drawImage :
public void drawImage(Bitmap bmp,PaintEventArgs e, Rectangle r)
{
foreach (Ball b in allBalls)
{
b.drawImage(bmp,e, r);
}
}
볼 코드의 drawImage
:
public void drawImage(Bitmap bmp, PaintEventArgs e, Rectangle r)
{
using (Graphics g = Graphics.FromImage(bmp))
{
e.Graphics.FillEllipse(brush, ballLocation);
g.DrawImage(bmp, 0, 0);
}
}
참고 :ballLocation
는 각 단계에서 공의 위치를 나타냅니다 직사각형이다 움직임 ..
내가 wro하고있는 것 응? 응용 프로그램을 느리게 만드는 원인은 무엇입니까?
비트 맵에 모든 것을 그려서 양식에 표시하는 데 제약이 있습니다. 폼을로드 할 때 생성 한 비트 맵을 전달하기 때문에 각각을 그릴 필요가 있습니다.
당신은'drawImage' 방법으로'Form1_Paint' 이벤트의'Graphics' 객체를 전달하고 그것을 직접 타원을 그림 대신 각각의 볼에 대한 새로운'Graphics'를 작성하여 훨씬 더 나은 성능을 얻을 것이다. – Rotem
@Rotem는 확인 그래서 당신은 내가 ** Form1_Paint **에 ** 그래픽 g = Graphics.FromImage (BMP) **를 이동의 drawImage 메소드에이 객체를 전송해야한다는 것을 의미? – Elior
정확하지 않습니다. 당신의 코드를 다시 살펴보면 왜'Graphics' 객체가 아닌 비트 맵에 그림을 그려야하는지 잘 모르겠습니다. – Rotem