2009-08-16 5 views
4

wxWidget에서 비트 맵의 ​​알파와 다른 비트 맵의 ​​RGB를 곱하여 새로운 이미지 (예 : 앤티 앨리어싱 된 원형 모양으로 사진 렌더링)를 생성하는 등의 방법으로 알파 블렌딩 작업을 수행 할 수 있습니까? .wxWidgets - 알파 블렌딩

+0

나는 이것을하는 방법을 알고 싶습니다. Atm 나는 견고한 알파 작업을 얻으려면 지역을 사용합니다. – Lodle

답변

2

비록 내가 알파 블렌딩을하지 않았지만, 나는 wxGraphicContext가 당신이 무엇인지 알고 있습니다.

http://docs.wxwidgets.org/stable/wx_wxgraphicscontext.html

나는 내 페인트 이벤트 처리기에서 다음을 사용하여 (Win32에서의) 그래픽 컨텍스트에 깜박임 무료 도면을 가지고 :

void OnPaint(wxPaintEvent& e) 
{ 
    wxBufferedPaintDC dc(this);   
    wxGraphicsContext* gdc = wxGraphicsContext::Create(dc); 
    // you drawing code here 
} 

는 편집 :이 이메일 흔적 좀 더 통찰력을 제공 할 수 있습니다

http://www.nabble.com/Is-alpha-blending-implemented-when-using-DC's--td17183159.html

+0

흠, 정확히는 그렇지 않습니다. 내가 정사각형 이미지를 가지고 있다고 가정 해 봅시다. DC의 blit 메서드 또는 wxGraphicsContext의 동등한 메서드를 사용하면 전체 비트 맵 또는 사각형 부분 만 렌더링 할 수 있습니다. 원본 이미지의 원형 영역을 어떻게 렌더링 할 수 있습니까? 일반적으로 대상 버퍼에 원을 렌더링하여 미리 255로 지워졌는지 확인합니다. 그런 다음 알파 값을 개별 RGB 구성 요소에 곱하는 버퍼에 대해 이미지를 알파 혼합합니다. 수동으로 처리하겠습니다 ... 구현을 게시합니다. – rui

+0

wxGraphicsContext의 DrawBitmap 메서드가 그릴 때 알파 채널에주의를 기울이지 않는다는 것을 확인 했습니까? OpenGL 캔버스가있는 경우 wxWidgets에 이미지를 그릴 때 OpenGL을 사용할 수도 있습니다. –

+0

다음 코드는 작업하고 싶습니다. wxBitmap my_image = LoadSomePngWithNoAlpha(); wxBitmap 버퍼; wxMemoryDc dc = 새 wxMemoryDc (버퍼); dc.SetBrush (wxCoulor (0, 0, 0, 0)); dc.Clear(); dc.BlitBitmapAsCircle (비트 맵, wxPoint (5,5), 42.0); 마지막 단계를 수행하기 위해 알파를 255로 설정 한 일반 원을 그린 다음 버퍼에 직사각형 인 wxBitmap에 블렌드하면 알파 == 255 비트 만 복사되어 끝납니다. PNG 이미지의 원형 자른 섹션으로 – rui