당신은에 전달할 자원에서있는 IStream을 확인해야합니다 :이 코드는 비트 맵을 그릴 것입니다
hr = pIWICFactory->CreateDecoderFromFilename( L"D:\\image.bmp",
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnDemand,
&pDecoder);
if (SUCCEEDED(hr))
{
// Create the initial frame.
hr = pDecoder->GetFrame(0, &pSource);
}
if (SUCCEEDED(hr))
{
//create a Direct2D bitmap from the WIC bitmap.
hr = pRenderTarget->CreateBitmapFromWicBitmap(
pSource,
NULL,
ppBitmap
);
}
:
이
는 비트 맵을 만들 수있는 내 코드입니다 IWICImagingFactory :: CreateDecoderFromStream입니다.
자원이 메모리에 있으므로 (로드 된 모듈이로드 된 경우) 가장 쉬운 방법은 IWICImagingFactory :: CreateStream을 사용하여 IWICStream 객체를 만들고 IWICStream :: InitializeFromMemory를 사용하여 초기화하는 것입니다.
리소스의 크기와 첫 번째 바이트에 대한 포인터를 얻으려면 FindResource, LoadResource, LockResource 및 SizeofResource 함수를 사용하십시오.
비트 맵의 헤더에 BI_BITFIELDS를 사용하여 알파 데이터 형식을 지정하는 경우 WIC에서이를 존중할 것입니다. Direct2D에 대한 경험이 없으므로 알파 데이터를 사용하기 위해 추가 작업이 필요하다고 말할 수는 없습니다.
BI_BITFIELDS를 사용할 수 없거나 작동하지 않는 경우 프레임의 IWICBitmapSource를 래핑하는 고유 한 IWICBitmapSource 구현을 작성할 수 있습니다. 대부분의 호출을 프레임 소스에 직접 전달하고 이미지 데이터의 실제 형식을 반환하는 고유 한 GetPixelFormat 메서드를 제공 할 수 있어야합니다. 또는 원하는 형식으로 IWICBitmap을 만들고 비트 맵을 잠그고 프레임 소스의 픽셀 데이터를 복사 할 수 있습니다.
재생 해 주셔서 감사합니다. 가능한 한 빨리 시도해 보겠습니다 (조사보다 우선 순위가 높은 것들). 어쨌든 알파 채널의 문제는 파일에서 비트 맵을 열 때 "존경받는"것이 아닙니다 ... 그래서 스트림을 사용하여 열 때 그것이 될 것입니다. –