@@ -357,50 +357,51 @@ static bool LoadImageSTB(const void* pSrcImage,
357357}
358358
359359Image::Image (IReferenceCounters* pRefCounters,
360- const IDataBlob* pFileData,
360+ const void * pSrcData,
361+ size_t SrcDataSize,
361362 const ImageLoadInfo& LoadInfo) :
362363 TBase{pRefCounters},
363364 m_pData{DataBlobImpl::Create (LoadInfo.pAllocator )}
364365{
365366 if (LoadInfo.Format == IMAGE_FILE_FORMAT_TIFF)
366367 {
367- LoadTiffFile (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , m_pData, m_Desc);
368+ LoadTiffFile (pSrcData, SrcDataSize , m_pData, m_Desc);
368369 }
369370 else if (LoadInfo.Format == IMAGE_FILE_FORMAT_HDR)
370371 {
371- if (!LoadImageSTB (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , VT_FLOAT32, m_pData, &m_Desc))
372+ if (!LoadImageSTB (pSrcData, SrcDataSize , VT_FLOAT32, m_pData, &m_Desc))
372373 {
373374 LOG_ERROR_MESSAGE (" Failed to load HDR image from memory. STB only supports 32-bit rle rgbe textures" );
374375 return ;
375376 }
376377 }
377378 else if (LoadInfo.Format == IMAGE_FILE_FORMAT_TGA)
378379 {
379- if (!LoadImageSTB (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , VT_UINT8, m_pData, &m_Desc))
380+ if (!LoadImageSTB (pSrcData, SrcDataSize , VT_UINT8, m_pData, &m_Desc))
380381 {
381382 LOG_ERROR_MESSAGE (" Failed to load TGA image" );
382383 return ;
383384 }
384385 }
385386 else if (LoadInfo.Format == IMAGE_FILE_FORMAT_PNG)
386387 {
387- if (DecodePng (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , m_pData, &m_Desc) != DECODE_PNG_RESULT_OK)
388+ if (DecodePng (pSrcData, SrcDataSize , m_pData, &m_Desc) != DECODE_PNG_RESULT_OK)
388389 {
389390 LOG_ERROR_MESSAGE (" Failed to decode png image" );
390391 return ;
391392 }
392393 }
393394 else if (LoadInfo.Format == IMAGE_FILE_FORMAT_JPEG)
394395 {
395- if (DecodeJpeg (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , m_pData, &m_Desc) != DECODE_JPEG_RESULT_OK)
396+ if (DecodeJpeg (pSrcData, SrcDataSize , m_pData, &m_Desc) != DECODE_JPEG_RESULT_OK)
396397 {
397398 LOG_ERROR_MESSAGE (" Failed to decode jpeg image" );
398399 return ;
399400 }
400401 }
401402 else if (LoadInfo.Format == IMAGE_FILE_FORMAT_SGI)
402403 {
403- if (!LoadSGI (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , m_pData, &m_Desc))
404+ if (!LoadSGI (pSrcData, SrcDataSize , m_pData, &m_Desc))
404405 {
405406 LOG_ERROR_MESSAGE (" Failed to load SGI image" );
406407 return ;
@@ -436,11 +437,12 @@ Image::Image(IReferenceCounters* pRefCounters,
436437 }
437438}
438439
439- void Image::CreateFromDataBlob (const IDataBlob* pFileData,
440- const ImageLoadInfo& LoadInfo,
441- Image** ppImage)
440+ void Image::CreateFromMemory (const void * pSrcData,
441+ size_t SrcDataSize,
442+ const ImageLoadInfo& LoadInfo,
443+ Image** ppImage)
442444{
443- *ppImage = MakeNewRCObj<Image>()(pFileData , LoadInfo);
445+ *ppImage = MakeNewRCObj<Image>()(pSrcData, SrcDataSize , LoadInfo);
444446 (*ppImage)->AddRef ();
445447}
446448
@@ -453,7 +455,7 @@ Image::Image(IReferenceCounters* pRefCounters,
453455{
454456}
455457
456- void Image::CreateFromMemory (const ImageDesc& Desc,
458+ void Image::CreateFromPixels (const ImageDesc& Desc,
457459 RefCntAutoPtr<IDataBlob> pPixels,
458460 Image** ppImage)
459461{
@@ -696,7 +698,7 @@ IMAGE_FILE_FORMAT CreateImageFromFile(const Char* FilePath,
696698 if (!pFileStream->IsValid ())
697699 LOG_ERROR_AND_THROW (" Failed to open image file \" " , FilePath, ' \" ' );
698700
699- auto pFileData = DataBlobImpl::Create ();
701+ RefCntAutoPtr<DataBlobImpl> pFileData = DataBlobImpl::Create ();
700702 pFileStream->ReadBlob (pFileData);
701703
702704 ImgFileFormat = Image::GetFileFormat (pFileData->GetConstDataPtr <Uint8>(), pFileData->GetSize (), FilePath);
@@ -712,7 +714,7 @@ IMAGE_FILE_FORMAT CreateImageFromFile(const Char* FilePath,
712714 {
713715 ImageLoadInfo ImgLoadInfo;
714716 ImgLoadInfo.Format = ImgFileFormat;
715- Image::CreateFromDataBlob (pFileData, ImgLoadInfo, ppImage);
717+ Image::CreateFromMemory (pFileData-> GetConstDataPtr (), pFileData-> GetSize () , ImgLoadInfo, ppImage);
716718 }
717719 else if (ppRawData != nullptr )
718720 {
@@ -731,6 +733,12 @@ IMAGE_FILE_FORMAT CreateImageFromMemory(const void* pImageData,
731733 size_t DataSize,
732734 Image** ppImage)
733735{
736+ if (pImageData == nullptr )
737+ {
738+ UNEXPECTED (" pImageData must not be null" );
739+ return IMAGE_FILE_FORMAT_UNKNOWN;
740+ }
741+
734742 IMAGE_FILE_FORMAT ImgFileFormat = IMAGE_FILE_FORMAT_UNKNOWN;
735743 try
736744 {
@@ -743,12 +751,13 @@ IMAGE_FILE_FORMAT CreateImageFromMemory(const void* pImageData,
743751 if (ImgFileFormat == IMAGE_FILE_FORMAT_PNG ||
744752 ImgFileFormat == IMAGE_FILE_FORMAT_JPEG ||
745753 ImgFileFormat == IMAGE_FILE_FORMAT_TIFF ||
746- ImgFileFormat == IMAGE_FILE_FORMAT_SGI)
754+ ImgFileFormat == IMAGE_FILE_FORMAT_SGI ||
755+ ImgFileFormat == IMAGE_FILE_FORMAT_HDR ||
756+ ImgFileFormat == IMAGE_FILE_FORMAT_TGA)
747757 {
748758 ImageLoadInfo ImgLoadInfo;
749759 ImgLoadInfo.Format = ImgFileFormat;
750- RefCntAutoPtr<IDataBlob> pImageDataBlob{ProxyDataBlob::Create (pImageData, DataSize)};
751- Image::CreateFromDataBlob (pImageDataBlob, ImgLoadInfo, ppImage);
760+ Image::CreateFromMemory (pImageData, DataSize, ImgLoadInfo, ppImage);
752761 }
753762 }
754763 catch (std::runtime_error& err)
0 commit comments