wxwidgets : wxbitmap :: convertToImage ()를 피하거나 속도를 높이는 방법이 있습니까?
문제
부드러운 그래픽을 얻으려면 Factor 2로 오버 샘플링하고 나중에 스케일을 다운로려 드리고자합니다.
그래서 내가하고있는 일은 wxbitmap 안에 wxmemorydc, DC에 복사하기 전에 스케일링하십시오. 아래 코드는 잘 작동하지만 bitmapoversampled.converttoimage (); 매우 느립니다.
wxbitmap에서 wximage로 변환하지 않고도 동일하게 달성 할 수있는 방법이 있습니까?
void OnPaint
( wxPaintEvent& event )
{
wxBitmap bitmapOversampled(m_width * 2, m_height * 2);
wxMemoryDC memDC(bitmapOversampled);
// Draw the elements.
drawElements(&memDC);
// Scale to correct size.
wxImage image = bitmapOversampled.ConvertToImage();
image.Rescale(m_width, m_height);
memDC.SelectObject(wxBitmap(image));
// Copy to dc.
wxPaintDC dc(this);
dc.Blit(0, 0, m_width, m_height, &memDC, 0, 0);
};
해결책
안타깝게도 스케일링을 더 빨리 수행하는 휴대용 WX 방법은 없습니다. 그러나 wxbitmap의 GTK 포트에는 스케일 방법이 있습니다. WXGTK에 사용할 수 있습니다. WXMSW의 경우 Win32 API의 StretchBlt를 사용할 수 있습니다. WXDC에는 Windows 용 기본 HDC 핸들을 제공하는 방법이 있습니다.
직접 그리면 다소 더 간단하게 만들 수 있습니다.
wxPaintDC dc(this);
dc.DrawBitmap(image, 0, 0, false);
또한 각 페인트 이벤트에서 비트 맵을 재현하지 마십시오. 회원으로 저장하고 wxSizeEvent
. 아마도 프로그램 속도가 상당히 높아질 것입니다.
또 다른 방법은 스케일링을 완전히 떨어 뜨리고 사용하는 것입니다. wxgraphicsContext. WXGTK에서 카이로, WXMSW에서는 GDI+를 사용합니다. 상대적으로 새롭지 만 항아리아를 그릴 수 있습니다.
제휴하지 않습니다 StackOverflow