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; }