Указатель, возвращаемый после блокировки wicBitmap, равен '\0'.C++

Программы на C++. Форум разработчиков
Anonymous
Указатель, возвращаемый после блокировки wicBitmap, равен '\0'.

Сообщение Anonymous »

Я хочу получить двоичные данные из wicBitmap, но данные, которые я получаю из блокировки, имеют значение только «\0». В примечаниях к методу GetDataPointer() я увидел, что «GetDataPointer недоступен в многопоточных приложениях», но даже в однопоточном режиме я получаю только «\0».

Код: Выделить всё

int main()
{
CComPtr wicBitmap;

Код: Выделить всё

CComPtr stream;
WindowDevice::_IWICFactory2->CreateStream(&stream);
stream->InitializeFromFilename(_T("C:\\image.png"), GENERIC_READ);

CComPtr decoder;
WindowDevice::_IWICFactory2->CreateDecoderFromStream(stream, NULL, WICDecodeMetadataCacheOnLoad, &decoder);

CComPtr frameDecode;
decoder->GetFrame(0, &frameDecode);

CComPtr converter;
WindowDevice::_IWICFactory2->CreateFormatConverter(&converter);
converter->Initialize(
frameDecode, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0, WICBitmapPaletteTypeCustom
);
WindowDevice::_IWICFactory2->CreateBitmapFromSource(converter, WICBitmapCacheOnLoad, &wicBitmap);

//
char** data = nullptr;
size_t* dataSize = 0;

D2D1_SIZE_U bitmapSize = { };
wicBitmap->GetSize(&bitmapSize.width, &bitmapSize.height);

WICRect rcLock = { 0, 0, bitmapSize.width, bitmapSize.height };
CComPtr lock;
wicBitmap->Lock(&rcLock, WICBitmapLockRead, &lock);

UINT tempBitmapSize = 0;
unsigned char* tempData = nullptr;
lock->GetDataPointer(&tempBitmapSize, &tempData);// data = '\0'
return 0;
}

Подробнее здесь: https://stackoverflow.com/questions/791 ... itmap-is-0

Вернуться в «C++»