Указатель, возвращаемый после блокировки 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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