Exemple #1
0
PixelData* MagickInputFormat::CreatePixelData(const char* filePath)
{
	PixelData* pData = NULL;

	
	MagickWandGenesis();

	MagickWand* wand = NewMagickWand();
	MagickBooleanType status = MagickReadImage(wand, filePath);

	if (status != MagickTrue)
	{
		DumpWandError(wand);
		DestroyMagickWand(wand);
		MagickWandTerminus();
		return NULL;
	}

	int w = MagickGetImageWidth(wand);
	int h = MagickGetImageHeight(wand);

	Format format = MagickGetImageAlphaChannel(wand) == MagickFalse ? FORMAT_RGB : FORMAT_RGBA;
	const char* strFormat = NULL;

	switch (format)
	{
	case FORMAT_RGB:  strFormat = "RGB"; break;
	case FORMAT_RGBA: strFormat = "RGBA"; break;
	};

	assert(strFormat != NULL);


	//Now create the pixel data
	pData = new PixelData(w, h, format);

	status = MagickExportImagePixels(wand, 0, 0, w, h, strFormat,  FloatPixel, pData->GetData());

	if (status != MagickTrue)
	{
		delete pData;

		DumpWandError(wand);
		DestroyMagickWand(wand);
		MagickWandTerminus();
		return NULL;
	}

	DestroyMagickWand(wand);
	MagickWandTerminus();


	return pData;
}