이미지를 만드는 동안 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)
을 지정하고 싶을 것입니다.
을 실제로으로 바꾸려면 TransparentBlt
과 AlphaBlend
의 효과를 결합 할 수 있습니다. 기본적으로 TransparentBlt
을 호출하여 모든 키 색상을 투명하게 처리 한 이미지를 임시 장치 컨텍스트 (DC)에 그려 넣은 다음 AlphaBlend
함수를 사용하여 임시 DC의 내용을 대상 DC에 혼합합니다. 당신이 원하는 투명성 효과.
비록 작동이 가능하도록 코드를 작성한 후에도 이것이 가능하고 멋지다고해도 RED SOFT ADAIR에는 GDI가 투명성을 위해 설계되지 않았다고하는 점이 있습니다. 여기에 설명 된 단순한 투명 효과보다 훨씬 더 멀리 갈 수는 없으며 그렇게하기가 쉽지 않습니다.
투명도가있는 매우 많은 그림이 필요한 경우 대신 GDI+ APIs으로 전환하고 싶을 것입니다. 이들은 투명도를 훨씬 더 잘 지원합니다. 실제로는 C++ API로 설계되었으므로 (C 폴백이 있음에도 불구하고) 클래스로 구성되어 있으므로 작업하기가 훨씬 쉽습니다.
GDI +에 대한주의 사항은 Windows XP 이상에서만 기본적으로 지원된다는 것입니다. Windows 2000 또는 이전 버전을 실행중인 클라이언트가있는 경우 프로그램을 실행하려면 GDI + DLL (Gdiplus.dll
)을 다시 배포해야합니다. 요즘에는 진입 장벽이 점점 줄어들고 있지만, 여전히 고려해야 할 가치가 있습니다.
감사합니다. 설명이 잘되어 있습니다. – anand