NOTE: This Technical Q&A has been retired. Please see the Technical Q&As page for current documentation.

Technical Q&A QTW73
Creating a PicHandle for a PICT Stored in Global Memory

Q We are developing a client/server application. The server app is on a Macintosh and the client app uses a Windows machine. Therefore, we need to create a PicHandle for a PICT stored in global memory. How is this done?

A Here is a code sample to do just that.
Note:
This will only work for a true PICT, not for all JPEG/JFIF images that can be loaded with OpenPictureFile/GetPictureFromFile.
// ---------------------------------------------------------------------
//
// Pict2DIB.c - Sample QuickTime for Windows Application
//
// Reads the PICT data from the PICT file specified on the command
// line into global memory, casts the PicHandle to access the PICT, and
// demonstrates using the PicHandle to create a .BMP file containing a
// DIB.
//
// dib.h and the WriteDIB function are available from Microsoft on the
// Microsoft Visual C++ and Microsoft Developer Network CD-ROMS.
//

//  Copyright 1988-1996 Apple Computer, Inc. All Rights Reserved.
//
// ---------------------------------------------------------------------

static char szAppName[] = "Pict2DIB";

#include <windows.h>
#include <qtw.h>
#include "dib.h"

#define MB_Ret(msg, code)  \
   { MessageBox (NULL, msg, szAppName, MB_OK); return code; }


int PASCAL WinMain (HINSTANCE hInstance,    HINSTANCE hPrevInstance,
                    LPSTR     lpszCmdParam, int       CmdShow)
   {
   HFILE       hfile;
   DWORD       lSize;
   HANDLE      hGlobalMem;
   char huge * hpGlobalMem;
   DIBHandle   hdPicture;

   // Open file and find its size
   hfile = _lopen (lpszCmdParam, READ);
   if (hfile==HFILE_ERROR) MB_Ret ("_lopen failure", 0);
   lSize = _llseek (hfile, 0, 2);

   // Allocate enough global memory for Pict data and obtain huge pointer
   hGlobalMem  = GlobalAlloc (GPTR, lSize-512);
   hpGlobalMem = (char huge *)GlobalLock (hGlobalMem);

   // Read Pict data from file into global memory and close file
   _llseek (hfile, 512L, 0);
   _hread  (hfile, hpGlobalMem, lSize-512);
   _lclose (hfile);

   // Cast global memory handle and use as PicHandle
   hdPicture = PictureToDIB ((PicHandle)hGlobalMem);
   WriteDIB ("pictout.bmp", hdPicture);

   // Unlock and free global memory
   GlobalUnlock (hGlobalMem);
   GlobalFree   (hGlobalMem);

   // Display MessageBox and exit
   MB_Ret (lpszCmdParam, TRUE);
   }

[Feb 09 1996]


Developer Documentation | Technical Notes | Development Kits | Sample Code