 
View Full Version : [C] ridimensionare immagine
andros94
08-05-2012, 18:45
Avrei bisogno, attraverso del codice, di ridimesionare la risoluzione  una immagine con estenzione .bmp da 1920x1018 pixel  in 800x600 pixel.
Potrei usare le librerie freeimage ma non so se contiene una funzione adatta e non so  proprio da dove iniziare...
andros94
09-05-2012, 14:30
up
Secondo me devi considerare il file bmp come un qualsiasi file binario ed editare direttamente i valori. Per rimpicciolire l'immagine avresti bisogno di un algoritmo (ad esempio potresti prendere determinati punti dell'immagine e metterli insieme per costruirne una più piccola, ma sicuramente ce ne sono altri che danno risultati migliori). Ovviamente devi conoscere alla perfezione lo standard con cui le immagini bmp vengono codificate, tenendo presente che l'immagine potrebbe essere compressa quindi dovresti prima decomprimerla.
Secondo me è cosi che si dovrebbe fare ma qualche utente più esperto potrebbe darti delle informazioni più precise.
Ovviamente faresti mooolto prima ad utilizzare librerie pronte, che sicuramente esistono.
Gimli[2BV!2B]
09-05-2012, 21:51
La prima suite che mi viene in mente è ImageMagick (http://www.imagemagick.org/script/index.php).
La prima API C tra le 2 elencate che ho aperto, MagicWand, offre proprio come primo esempio il ridimensionamento e salvataggio su file di un'immagine caricata da file. (http://www.imagemagick.org/script/magick-wand.php)
L'altra, MagickCore (http://www.imagemagick.org/script/magick-core.php), l'ho consultata dopo ma la eviterei perché un po' troppo a basso livello.
Non ti consiglio di reinventare la ruota andando a leggerti i pixel, a meno che non sia proprio interessato ad approfondire la tua conoscenza nell'elaborazione delle immagini.
La FreeImage che hai citato non la conoscevo, ma soprattutto non ho trovato esempi in C dopo qualche minuto di ricerca (mentre ho impiegato 20 sec per trovare l'altra).
andros94
10-05-2012, 20:36
;37421734']La prima suite che mi viene in mente è ImageMagick (http://www.imagemagick.org/script/index.php).
La prima API C tra le 2 elencate che ho aperto, MagicWand, offre proprio come primo esempio il ridimensionamento e salvataggio su file di un'immagine caricata da file. (http://www.imagemagick.org/script/magick-wand.php)
L'altra, MagickCore (http://www.imagemagick.org/script/magick-core.php), l'ho consultata dopo ma la eviterei perché un po' troppo a basso livello.
Non ti consiglio di reinventare la ruota andando a leggerti i pixel, a meno che non sia proprio interessato ad approfondire la tua conoscenza nell'elaborazione delle immagini.
La FreeImage che hai citato non la conoscevo, ma soprattutto non ho trovato esempi in C dopo qualche minuto di ricerca (mentre ho impiegato 20 sec per trovare l'altra).
sto seguendo i tuoi consigli:D 
ho scaricato magickwand e ho copiato gli header nella cartella di mingw, uso codeblocks come IDE, ma compilando il codice che c'è nell' esempio mi da alcuni errori  del tipo "undefined reference to  'funzione()' ".
Evidentemente devo linkare le librerie ma non so come dato che  è la prima volta che uso api esterne...
andros94
13-05-2012, 16:02
up
Gimli[2BV!2B]
13-05-2012, 17:53
Non ho mai usato Code::Blocks per un significativo numero di minuti.
Posso solo riportarti questa discussione. (http://www.imagemagick.org/discourse-server/viewtopic.php?f=6&t=19108)
andros94
13-05-2012, 20:24
ma quando avvio l' eseguibile mi chiede varie DLL :mad:
Gimli[2BV!2B]
13-05-2012, 23:38
dll che devi mettere nella stessa cartella dell'eseguibile... o nella working directory/cartella di lavoro di debug...
andros94
14-05-2012, 14:45
io avrei bisogno di qualcosa che funzioni senza dll a presso..
Gimli[2BV!2B]
14-05-2012, 21:16
Linking statico, che credo sia possibile con MagicWand (cerca le *.lib disponibili, se la statica è presente dovrebbe essere riconoscibile per lo meno per la dimensione).
Purtroppo in questo caso non ho trovato esempi specifici, né qualcosa di utile relativo alle impostazioni per Code::Blocks.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.