Newsgroup: it.comp.lang.c
Titolo: Libreria x caricamento immagini

Sto cercando una libreria freeware x il caricamento di immagini (almeno BMP,
JPG, GIF), utilizzabile da C (no C++), per win32 (se e' cross platform e'
anche meglio), linkabile staticamente (no DLL).
Ho trovato ImageMagick, e' bellissima, ma mi pare "un pochino" pesante.
Qualcuno sa indicarmi se e dove si trova ?
Grazie 1k.
Mik.
--
============================================================================


OleLoadPicture e OleLoadPicturePath potrebbero soddisfare in parte i tuoi 
requisiti: usare oggetti COM da C è possibile (anche se è meglio usare 
C++), la funzione non è portabile e richiede una DLL (che però e di sistema 
e non deve essere ridistribuita con la tua applicazione).
Se cerchi una libreria per la gestione delle immagini (purtroppo è 
difficile trovarne una che si limiti al solo caricamento) puoi provare 
paintlib (
www.paintlib.de
).
-- 
Valter Minute
min...@inwind.it
 (the reply address of this message is invalid)

 ha scritto nel messaggio
news:Xns905677394BB...@151.1.1.14...

Molte grazie Walter.
Ho visto anche la PaintLib e mi sembra sana, anche se _forse_ sproporzionata
per le mie esigenze.
Opterei quindi per le funzioni Olexxxx chiamando da C. Il brutto e' che non
so davvero da dove partire. Hai uno snippet ?
Mik.
--


Ti posso passare questo pezzo di codice in C++.
Sul come utilizzare le interfacce COM da C posso solo rimandarti al 
Platform SDK (e consigliarti, per il poco che ho visto, di lasciar perdere 
il C per utilizzare COM...)
IPicturePtr è uno "smart pointer" a un'interfaccia IPicture (guarda l'help 
di _com_ptr_t per vedere come dichiararne uno) e incapsula la gestione del 
reference counting (AddRef e Release). L'oggetto COM viene rilasciato 
quando lo smart pointer esce dallo scope (in C la gestione sarà 
necessariamente più complessa).
IPicturePtr	picture;
Anche la classe _bstr_t incapsula una BSTR (formato stringa COM, con 2 byte 
di lunghezza in testa e allocata con SysAllocString). Anche in questo caso 
la stringa viene allocata e rilasciata automaticamente.
_bstr_t	bstrpath(filepath);
 
Questa è la funzione che ti interessa (viene caricata l'immagine).
L'immagine è "manipolabile" tramite l'interfaccia IPicture (vedi la 
documentazione del Platform SDK per maggiori info).
 
if (SUCCEEDED(::OleLoadPicturePath    
(bstrpath,NULL,0L,0xFFFFFFFF,IID_IPicture,(void**)&picture)))
{
L'immagine viene disegnata nella finestra hwnd (utilizzando il device 
context hdc) ridimensionandola per coprire tutta la finestra (il codice è 
preso da uno screen saver). 
Il DC utilizza il map mode HIMETRIC (tanto per complicare la vita...).
    	OLE_XSIZE_HIMETRIC	width;
    	OLE_YSIZE_HIMETRIC	height;
 
    	RECT	r;
	GetClientRect(hwnd,&r);
Dopo aver ricavato altezza e larghezza della picture, viene richiamato il 
metodo render per disegnarla:
	if (SUCCEEDED(picture->get_Height(&height))&&SUCCEEDED(picture->
get_Width(&width)))						
						picture->Render
(hdc,0,0,r.right,r.bottom,0,height,width,-height,NULL);
				}					
Spero di esserti stato di aiuto.


Prova OpenIL. 
www.openil.org
--
Marco Iannaccone
marc...@tin.it
ICQ UIN: 18748121     MetalCoder
"What is real? How do you define real? If you're talking about your senses,
what you feel, taste,
smell, or see, then all you're talking about are electrical signals
interpreted by your brain."
Morpheus - The Matrix

 Spero di esserti stato di aiuto.
Il tuo codice funziona a meraviglia.
Mi hai salvato la giornata e x questo te ne sono estremamente grato.
Adesso sono al punto di dover convertire l'immagine in un buffer 32 bit
ARGB, in modo da poterla trattare con le mie funzioni di elaborazione. Sono
sicuro che IPicture mi permette di accedere ai pixel dell'immagine..
Nella documentazione vedo che, prendendo l'handle GDI della IPicture
(get_Handle()), posso ottenere informazioni sulla CBITMAP relativa. Penso
che dovrei comunque scrivere codice per convertire i dati grafici in formato
 ARGB. A meno che non esista qualche bella funzioncella che... sai niente in
proposito ?
Ancora grazie,
Mik.
--
============================================================================

 Prova OpenIL. 
www.openil.org
Ciao Marco,
grazie per la dritta. Ho gia' scaricato OpenIL e mi pare sana. Tra i link ho
trovato anche FreeImage, che forse e' piu' semplice nell'uso.
Le provo entrambe e magari ti dico.
Mik.
--
============================================================================