Dopo aver provato la libreria Freeimage ho visto da altri sorgenti l'uso della libreria CxImage.
L'ho scaricata e ho cercato di usarla ma non ci riesco, da molti errori.
Uso il DevC++
Aiutatemi ...
Dopo aver provato la libreria Freeimage ho visto da altri sorgenti l'uso della libreria CxImage.
L'ho scaricata e ho cercato di usarla ma non ci riesco, da molti errori.
Uso il DevC++
Aiutatemi ...
Aiutati che Zio t'aiuta...
QUALI errori ricevi? Hai letto la documentazione ufficiale? Non so se CxImage sia compatibile o meno con MinGW.
In ogni caso ti ripeto che difficilmente l'errore è nella FreeImage, mi sembra molto più probabile che i tuoi file BMP siano malformed.
"Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."
XD
No l'errore non è nella freeimage ma ho confrontato 2 programmi uno mio e uno di un altro.
Il codice che usiamo per fare lo screenshot è simile, ma nella conversione lui utilizza CxImage per convertire l'immagine dello screenshot, e ci riesce.
Io utilizzo Freeimage e l'immagine non me la converte.
Quindi a parità di immagine, freeimage a me nn riesce e a lui Cximage si.
Ma perché non pubblichi un file zippato contenente queste benedette immagini da qualche parte così possiamo capire dove è il problema?!
Se proprio vuoi usare CxImage devi comunicare TUTTI gli errori che ricevi in fase di compilazione... Non abbiamo ancora in dotazione la sfera di cristallo.
"Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."
Ok mi arrendo dai .... trasferiro questa benedetta immagine in formato .bmp
L'ultima cosa che chiedo è questa:
Posto di seguito il codice per fare lo screenshot che ho trvato da un post su questo forum:
screenshot()
{
BITMAPINFO bmi; //info del file di destinazione
BITMAPFILEHEADER bfh; //header del file di destinazione
int Lunghezza;
int Altezza;
HWND hWnd;
HDC hdc ;
HDC memDC;
HBITMAP hbm ;
HBITMAP hbmOld;
BYTE *Bytes;
HANDLE hfile;
//File di salvataggio
FILE *screenshoter;
int infosize = 0;
int size = 0;
int bitsize = 0;
//Dimensioni da catturare
Lunghezza = GetSystemMetrics(SM_CXSCREEN);
Altezza = GetSystemMetrics(SM_CYSCREEN);
//Creazione Bitmap
hWnd = GetDesktopWindow();
hdc = GetDC(hWnd);
memDC = CreateCompatibleDC(hdc);
hbm = CreateCompatibleBitmap(hdc, Lunghezza, Altezza);
hbmOld = (HBITMAP)SelectObject(memDC, hbm);
BitBlt(memDC, 0, 0, Lunghezza, Altezza, hdc, 0, 0, SRCCOPY);
ZeroMemory(&bmi,sizeof(BITMAPINFO));
bmi.bmiHeader.biSize=sizeof(bmi.bmiHeader);
bmi.bmiHeader.biWidth=GetSystemMetrics(SM_CXSCREEN );
bmi.bmiHeader.biHeight=GetSystemMetrics(SM_CYSCREE N);
bmi.bmiHeader.biPlanes=1;
bmi.bmiHeader.biBitCount=16;
bmi.bmiHeader.biCompression= BI_RGB; //BI_RLE4; // BI_RGB;
bmi.bmiHeader.biSizeImage=3 * bmi.bmiHeader.biWidth * bmi.bmiHeader.biHeight;
//Alloca memoria per l'immagine
Bytes = (byte *) malloc(bmi.bmiHeader.biSizeImage);
GetDIBits( memDC, //handle to device
hbm, //Handle to the bitmap
0, //first scan line to set in destination bitmap
bmi.bmiHeader.biHeight, //number of scan lines to copy
Bytes, //address of array for bitmap bits
&bmi, //address of structure with bitmap data
DIB_RGB_COLORS ); //RGB or palette index //DIB_PAL_COLORS);
infosize = sizeof(BITMAPINFOHEADER);
size = sizeof(BITMAPFILEHEADER);
bfh.bfType='MB';
bfh.bfOffBits=sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
bfh.bfSize=bmi.bmiHeader.biSizeImage + bfh.bfOffBits;
//Apre il file di salvataggio
screenshoter = fopen("Immagine.bmp","wb");
//Se il file non à errore
if (screenshoter != NULL)
{
//Scrive l'immagine
fwrite(&bfh, 1, sizeof(BITMAPFILEHEADER), screenshoter);
fwrite(&bmi, 1, infosize, screenshoter);
fwrite((char *)Bytes, 1, bmi.bmiHeader.biSizeImage, screenshoter);
//Chiude il file
fclose(screenshoter);
}
//Rilascia le risorse
DeleteDC(memDC);
ReleaseDC(hWnd,hdc);
DeleteObject(hbm);
hfile = NULL;
Bytes = NULL;
//Libera memoria
free(Bytes);
}
Il file .bmp dello screenshot è di 1,5 mb.
Qualcuno saprebbe modificare questo codice in modo da far pesare di meno il file .bmp?
Beh ... il codice non c'entra ... dipende dai punti orrizzontali, da quelli verticali e dai colori ...
Con 1024 x 768 x 2 byte per i colori il totale e' 1,5 M ...
No MP tecnici (non rispondo nemmeno!), usa il forum.