Back

static Err LoadJpegFromHandle(MemHandle hImage, Boolean resample, Coord width, Coord height)
{
 Err            err      = errNone;
 pnoJpeg2Ptr    jpegData = NULL;
 BitmapPtr      bmp      = NULL;
 BitmapPtrV3    bmpV3    = NULL;
 
 
 err = pnoJpeg2Create(pnoJpegRefNum, &jpegData);
 if(err != errNone)
 {
  ErrAlert(err);
  return(err);
 }
 /*
  To change the source use one of the other functions:
    pnoJpeg2LoadFromPtr
    pnoJpeg2LoadFromVFS
    pnoJpeg2LoadFromFileStream
 */

 err = pnoJpeg2LoadFromHandle(pnoJpegRefNum, jpegData, hImage);
 if(err != errNone)
 {
  ErrAlert(err);
  return(err);
 }
 /*
 Here is it possible to change loading settings with
       pnoJpeg2SetScaleFactor
       pnoJpeg2SetGrayscale
       pnoJpeg2SetMaxDimensions
 */

 err = pnoJpeg2Read(pnoJpegRefNum, jpegData, &bmp);
 if(err != errNone)
 {
  ErrAlert(err);
  return(err);
 }
 err = pnoJpeg2Free(pnoJpegRefNum, &jpegData);
 if(err != errNone)
 {
  ErrAlert(err);
  return(err);
 }
 
 if(bmp)
 {
  if(resample)
  {
   /*
      To Increase speed it is possible to use the pnoJpeg2Resize-Function.
      If you want to maintain the porportions use the pnoJpeg2CreateThumbnail-Function
   */
   bmp = pnoJpeg2Resample(pnoJpegRefNum, bmp, width, height, &err);
   if(err != errNone)
   {
     ErrAlert(err);
     return(err);  
   }

  }
 
  err = pnoJpeg2Bmp2DoubleDensity(pnoJpegRefNum, bmp, &bmpV3);
    if(err != errNone)
    {
     ErrAlert(err);
     return(err);
    }
  
  if(bmpV3)
  {
   WinDrawBitmap((BitmapPtr)bmpV3, 0, 15);
   BmpDelete((BitmapPtr)bmpV3);
  }
 
  BmpDelete(bmp);
 }
 
 return(errNone);
}