Oppure

Loading
27/09/09 7:11
inthehouse
Ciao ragazzi... tutto bene?

Forse mi potete aiutare,
ho una piccola applicazione che mi crea un oggetto di tipo Graphics acquisendo l'handle al device context dello schermo, Graphics obj(hdc). (HDC acquisto con BeginPaint).
Purtoppo non riesco a capire come fare a salvare il mio oggetto in un file .png...

Mi sapere aiutare??

Grazie mille...
aaa
27/09/09 7:37
theprogrammer
Parti da questo

msdn.microsoft.com/en-us/library/…(VS.85).aspx

e poi utilizza la Save dell'oggetto bitmap con clsid trovato per il formato PNG.
aaa
27/09/09 7:42
inthehouse
Già provato... ma non mi salva nulla

Bitmap *b = new (w,h,&g)
b->save(L"c:\tmp.png", &pngclsid, NULL)

questo lo faccio in un metodo della mia classe che è chiamato dal messaggio WM_PAINT.
GDI+ è inizializzata nel file principale...
aaa
27/09/09 7:44
theprogrammer
Ma scusa ... e il CLSID in pngclsid quando lo ottieni?
aaa
27/09/09 7:50
inthehouse
ho dimenticato a scrivere l'istruzione, lo ottengo con GetEncoderClsid(L"image/png", &pngid);

posto il codice completo:

	//inizializzo il contesto grafico
	Graphics g(hdc);
	Bitmap *bmp = new Bitmap(rt.top-rt.bottom,rt.right-rt.left, g);

        //Qui disegno

	CLSID pngid;
	GetEncoderClsid(L"image/png", &pngid);
	bmp->Save(L"c:\temporanea.png",&pngid,NULL);
aaa
27/09/09 7:53
theprogrammer
Hai controllato, con il debug, eseguendo linea per linea, se il CLSID e' corretto?

Se vuoi, posta il progetto completo in modo da poterlo provare ...
aaa
27/09/09 7:57
inthehouse
Si, il CLSID dovrebbe essere corretto, lo ottengo con la funzione che ho trovato sulle MSDN:

int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
   UINT  num = 0;          // number of image encoders
   UINT  size = 0;         // size of the image encoder array in bytes

   ImageCodecInfo* pImageCodecInfo = NULL;

   GetImageEncodersSize(&num, &size);
   if(size == 0)
      return -1;  // Failure

   pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
   if(pImageCodecInfo == NULL)
      return -1;  // Failure

   GetImageEncoders(num, size, pImageCodecInfo);

   for(UINT j = 0; j < num; ++j)
   {
      if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
      {
         *pClsid = pImageCodecInfo[j].Clsid;
         free(pImageCodecInfo);
         return j;  // Success
      }    
   }

   free(pImageCodecInfo);
   return -1;  // Failure
} 


Il mio problema è disegnare su una finestra con un oggetto Graphics e poi salvare questa immagine
aaa
27/09/09 8:03
theprogrammer
Ma il file non viene creato o viene creato vuoto ... o cosa ?

Hai controllato cosa restituisce la chiamata a bmp->Save ?

Ripeto ... se puoi postare TUTTO il progetto, lo provo ... altrimenti non so cosa dirti ...

aaa