2011-01-11 6 views
0

저급 프로그래머의 도움을 주시면 고맙겠습니다. 내 문제는 다음과 같습니다. 비디오 메모리에 ARGB8888 형식의 비트 맵을 직접 인쇄하려고합니다. 비트 맵의 ​​형식은 괜찮습니다. 문제는 알파 채널입니다. 사용 방법을 알 수 없습니다. 내가 일을하고있어 각 바이트를 복사 1.이 각 채널 RG B. 수행됩니다 -PNG의 알파 투명도를 메모리에서 직접 처리하는 방법은 무엇입니까?

컬러가 0에 따라 다릅니다
CompositedPixelColor = Alpha * ForegroundPixelColor + (1 - Alpha) * BackgroundPixelColor 

:이 같은 픽셀을 오버레이 위키 피 디아에있는 코드를 본 적이 위의 수식을 사용하여 비디오 메모리에 직접 내 비트 맵의 ​​각 픽셀의 각 색,하지만 색상이 자신을 괜찮아 제시하지 않기 때문에 뭔가를 놓치고있어.

이 스레드에 게시 된 코드와 같은 작업을하려고합니다. http://www.badadev.com/create-a-photo-editing-app/ 하지만 여기에서는 투명도를 처리하지 않으며 이것이 내 문제입니다. 고맙습니다!

답변

0

당신이 알파 채널을 unsigned char로 사용한다면 alpha는 0과 1 사이의 값으로 취급됩니다. 알파 채널을 unsigned char로 사용하면 물론 작동하지 않습니다. 정수 공간에서 수행하려면 다음을 사용하십시오 :

unsigned short background = 0x40; 
unsigned short foreground = 0xe0; 
unsigned short alpha = 0xc0; 
unsigned short compositedcolor = (alpha * foreground + (0xff - alpha) * background) >> 8; 

참고 이러한 반바지 동안 값이 모두 0되어야한다고 - 255, 짧은은 바로 숯불 * 숯불 제품에 대한 계산 공간으로 필요합니다, 당신은 또한 중간 캐스트를 사용할 수 있지만 난 그냥 서명 사용 모든 사람들이 읽을 수있는 짧은 유형.

+0

아, 팁은 고맙습니다. 나는 문제를 알아 냈다. RGBA 값은 ABGR 형식으로 메모리에 저장됩니다. 그러나 당신의 코드는 계산을 향상시켜야 할 것을 생각 나게합니다 : >> 8 Thx 많이 – HugoFS