IImgCtx를 사용하여 이미지를로드하는 작업 코드가 있지만 알파 채널을 얻는 방법을 알아낼 수 없습니다. .gif 및 .png와 같은 이미지의 경우 투명 픽셀이 있지만 24 비트 비트 맵 이외의 다른 것을 드로잉 표면으로 사용하면 작동하지 않습니다. 인터페이스에 대한 참조를 들어 IImgCtx를 사용하여 알파 채널이있는 이미지를로드하려면 어떻게해야합니까?
: 내 코드는 다음과 같습니다 http://www.codeproject.com/KB/graphics/JianImgCtxDecoder.aspx: "StartDC는"기본적으로 CreateCompatibleDC (NULL)와 "EndDC를"래핑
IImgCtx *Ctx = 0;
HRESULT hr = CoCreateInstance(CLSID_IImgCtx, NULL, CLSCTX_INPROC_SERVER, IID_IImgCtx, (LPVOID*)&Ctx);
if (SUCCEEDED(hr))
{
GVariant Fn = Name;
hr = Ctx->Load(Fn.WStr(), 0);
if (SUCCEEDED(hr))
{
SIZE Size = { -1, -1 };
ULONG State = 0;
while (true)
{
hr = Ctx->GetStateInfo(&State, &Size, false);
if (SUCCEEDED(hr))
{
if ((State & IMGLOAD_COMPLETE) || (State & IMGLOAD_STOPPED) || (State & IMGLOAD_ERROR))
{
break;
}
else
{
Sleep(1);
}
}
else break;
}
if (Size.cx > 0 &&
Size.cy > 0 &&
pDC.Reset(new GMemDC))
{
if (pDC->Create(Size.cx, Size.cy, 32))
{
HDC hDC = pDC->StartDC();
if (hDC)
{
RECT rc = { 0, 0, pDC->X(), pDC->Y() };
Ctx->Draw(hDC, &rc);
pDC->EndDC();
}
}
else pDC.Reset();
}
}
Ctx->Release();
가 적절한 SelectObjects으로, DeleteDC를 래핑 HBITMAPS 등. 그리고 pDC-> Create (x, y, bit_depth)는 CreateDIBSection (... DIB_RGB_COLORS ...)을 호출합니다. 따라서 24 비트/픽셀 비트 맵을 만들었지 만 표현할 알파가 없으면 32 비트/픽셀 비트 맵을 전달하면 RGB 색상 채널이 채워지고 알파 채널 0x00이 남습니다. 이미지를 완전히 불투명하게 설정하기 위해 0xff로 알파 채널을 OR 한 경우 24 bpp 옵션과 동일하게 보입니다. 이제이 인터페이스는 Internet Explorer에서 이미지를로드하는 데 사용되며 분명히 투명도를 지원하므로 인터페이스에서 알파 수준을 얻는 것이 가능하다고 생각합니다. 문제는 어떻게?
는