83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
#pragma once
|
||
|
||
#include "Types.h"
|
||
#include "Utils.h"
|
||
|
||
namespace Jpeg2000
|
||
{
|
||
//-------------------------------------------------------------------------------------------------------------------------------
|
||
// Image
|
||
//-------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
Image* Image_CreateEmpty()
|
||
{
|
||
Image *pImage = (Image*)Malloc(sizeof(Image));
|
||
return pImage;
|
||
}
|
||
|
||
void Image_Destroy(Image *pImage)
|
||
{
|
||
if (pImage)
|
||
{
|
||
if (pImage->pComponents)
|
||
{
|
||
for (int nIndex = 0; nIndex < pImage->nCsiz; nIndex++)
|
||
{
|
||
ImageComponent *pImageComp = &pImage->pComponents[nIndex];
|
||
Free(pImageComp->pData);
|
||
}
|
||
Free(pImage->pComponents);
|
||
}
|
||
Free(pImage);
|
||
}
|
||
}
|
||
|
||
Image* Image_Create(int nComponentsCount, ImageComponentParams *pCompParams, ColorSpace eColorSpace)
|
||
{
|
||
Image *pImage = NULL;
|
||
pImage = (Image*)Malloc(sizeof(Image));
|
||
|
||
if (pImage)
|
||
{
|
||
pImage->eColorSpace = eColorSpace;
|
||
pImage->nCsiz = nComponentsCount;
|
||
|
||
// Выделяем память под компоненты
|
||
pImage->pComponents = (ImageComponent*)Malloc(pImage->nCsiz * sizeof(ImageComponent));
|
||
|
||
if (!pImage->pComponents)
|
||
{
|
||
Image_Destroy(pImage);
|
||
return NULL;
|
||
}
|
||
|
||
for (int nCurComponent = 0; nCurComponent < nComponentsCount; nCurComponent++)
|
||
{
|
||
ImageComponent *pComponent = &pImage->pComponents[nCurComponent];
|
||
|
||
pComponent->nXRsiz = pCompParams[nCurComponent].nXRsiz;
|
||
pComponent->nYRsiz = pCompParams[nCurComponent].nYRsiz;
|
||
pComponent->nWidth = pCompParams[nCurComponent].nWidth;
|
||
pComponent->nHeight = pCompParams[nCurComponent].nHeight;
|
||
pComponent->nXOsiz = pCompParams[nCurComponent].nXoffset;
|
||
pComponent->nYOsiz = pCompParams[nCurComponent].nYoffset;
|
||
pComponent->nPrecision = pCompParams[nCurComponent].nPrecision;
|
||
pComponent->nBPP = pCompParams[nCurComponent].nBPP;
|
||
pComponent->nSigned = pCompParams[nCurComponent].nSigned;
|
||
|
||
pComponent->pData = (int*)Malloc(pComponent->nWidth * pComponent->nHeight * sizeof(int));
|
||
if (!pComponent->pData)
|
||
{
|
||
Image_Destroy(pImage);
|
||
return NULL;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// TO DO: Выдать сообщение об ошибке
|
||
}
|
||
|
||
return pImage;
|
||
}
|
||
} |