2012-07-25 2 views
2

alphablend 기능을 사용하여 이미지의 특정 부분을 투명하게 만들 수 있습니까?Alphablend 기능

RGB (0,0,255)로 특정 영역을 포함하는 이미지를 만들 수 있으며 이미지를 그릴 때 해당 영역 만 투명해야합니다 .AlphaBlend 기능으로 가능합니다. 그렇습니다, 그렇다면 어떻게됩니까?

나는 alphablend에 관해 읽었지 만 여전히 나에게 명확하지 않습니다. 우리는 이미지를 생성하는 동안 alphachannel을 지정할 필요가 있다고 생각합니다. 알파 채널이 특정 픽셀에 없으면 해당 픽셀을 투명하게 만들 수 없습니까?

답변

5

이미지를 만드는 동안 alphacannel을 지정해야합니다. 알파 채널이 특정 픽셀에 없으면 해당 픽셀을 투명하게 만들 수 없습니까?

예, AlphaBlend function은 알파 채널 정보가 이미 저장된 이미지를 그리기위한 것입니다. 이것들은 픽셀 당 32 비트 (bpp) 이미지로, 빨강, 초록, 파랑 ​​및 알파 채널 정보를 포함합니다. AlphaBlend 함수는 BitBlt과 유사하다고 생각할 수 있습니다. 단, 이미지에 포함될 수있는 투명 또는 반투명 픽셀은 그대로 유지됩니다.

이 기능의 핵심은 마지막 매개 변수 인 BLENDFUNCTION structure입니다. 문서는이 말하고있다 : 소스 용

  소스 및 대상의 비트 맵의 ​​알파 블렌딩 기능 글로벌 알파 값은 전체 소스 비트 맵에 적용될 [IN] ftn 및 포맷 정보 비트 맵. 원본 및 대상 혼합 기능은 현재 AC_SRC_OVER으로 제한됩니다.

그래서 이미지에 이미 미리 곱해진 알파 채널이 있다고 가정합니다. AlphaBlend 함수는 이미지를 그릴 때 해당 값을 사용하지만 BLENDFUNCTION 구조의 SourceConstantAlpha 멤버에 대해 0에서 255 사이의 값을 지정하여 불투명도를 조정할 수 있습니다. 이 값을 255로 설정하면 비트 맵의 ​​픽셀 별 알파 값만 사용됩니다. 0으로 설정하면 이미지가 투명하다고 가정합니다. 그 사이에 뭔가를 설정하면 이미지가 어느 정도 투명하게 그려집니다.

alphablend 기능을 사용하여 이미지의 특정 부분을 투명하게 만들 수 있습니까?

난 RGB (0, 0, 255)와이 때 투명해야 해당 영역이 이미지를 그릴과 특정 지역을 포함하는 이미지를 생성 할 수있다.

내가하려고하는 것 (kolenda suggests)이 색상 키잉이라고하는 것처럼 들립니다. 기본적으로 이미지에서 RGB (0,0,255)와 같은 특정 색을 투명하게 만들고 투명 색의 색으로 RGB (0,0,255)로 이미지를 그리도록 Windows에 지시합니다. 원본 이미지에서 RGB (0,0,255) 인 모든 픽셀은 그려지는 이미지에서 투명하게됩니다.

예, 가능합니다. 도구 모음 버튼 아이콘 등의 경우 Windows에서 실제로 일반적입니다. 일반적으로 색상 흐림 (RGB (255,0,255))을 사용합니다. 아무도 그것을 이미지에서 보통 사용하지 않을 것입니다.

이 책임을 맡은 기능은 TransparentBlt function (다시 말하면 동일한 패턴으로 명명 된 BitBlt과 유사 함)입니다. 중요한 것은 이미지를 그릴 때 투명하게 취급 할 수있는 특정 색상 인 색상 키를 지정할 수 있다는 것입니다. 마지막 매개 변수는 crTransparent입니다. 귀하의 경우, RGB(0,0,255)을 지정하고 싶을 것입니다.

을 실제로으로 바꾸려면 TransparentBltAlphaBlend의 효과를 결합 할 수 있습니다. 기본적으로 TransparentBlt을 호출하여 모든 키 색상을 투명하게 처리 한 이미지를 임시 장치 컨텍스트 (DC)에 그려 넣은 다음 AlphaBlend 함수를 사용하여 임시 DC의 내용을 대상 DC에 혼합합니다. 당신이 원하는 투명성 효과.

비록 작동이 가능하도록 코드를 작성한 후에도 이것이 가능하고 멋지다고해도 RED SOFT ADAIR에는 GDI가 투명성을 위해 설계되지 않았다고하는 점이 있습니다. 여기에 설명 된 단순한 투명 효과보다 훨씬 더 멀리 갈 수는 없으며 그렇게하기가 쉽지 않습니다.

투명도가있는 매우 많은 그림이 필요한 경우 대신 GDI+ APIs으로 전환하고 싶을 것입니다. 이들은 투명도를 훨씬 더 잘 지원합니다. 실제로는 C++ API로 설계되었으므로 (C 폴백이 있음에도 불구하고) 클래스로 구성되어 있으므로 작업하기가 훨씬 쉽습니다.

GDI +에 대한주의 사항은 Windows XP 이상에서만 기본적으로 지원된다는 것입니다. Windows 2000 또는 이전 버전을 실행중인 클라이언트가있는 경우 프로그램을 실행하려면 GDI + DLL (Gdiplus.dll)을 다시 배포해야합니다. 요즘에는 진입 장벽이 점점 줄어들고 있지만, 여전히 고려해야 할 가치가 있습니다.

+0

감사합니다. 설명이 잘되어 있습니다. – anand

1

alpha 채널을 투명도 데이터로 별도로 사용하는 경우 알파 블렌딩이 사용됩니다.

당신이 찾고있는 것은 color keying입니다. 이는 특정 색상을 transparent으로 사용한다는 것을 의미합니다.

1

WinGdi 기능 자체에서는 Alphablending afaict를 사용할 수 없습니다. 이것은 등

GDI +와 같은 새로운 API를 함께 할 수있는 다른 윈도우 grahic API에 대한 overwiev는 여기에서 찾을 수 있습니다 :

http://msdn.microsoft.com/en-us/library/windows/desktop/ee663279%28v=vs.85%29.aspx http://msdn.microsoft.com/en-us/library/ windows/desktop/ee417756 % 28v = vs.85 % 29.aspx

투명한 그림 (원하는 색으로 투명하게 만들 수 있음)을 원할 경우 TransparentBlt을 사용할 수 있습니다.

+1

[AlphaBlend' 기능의 존재를 어떻게 설명 할 수 있습니까?] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd183351.aspx)? –

+0

당신의 요점! 결코 사용하지 마십시오. –