Mi piacerebbe farlo in una piattaforma indipendente, e so che libpng è una possibilità, ma trovo difficile capire come. Qualcuno sa come farlo in un modo semplice?Salvare un semplice buffer di immagini in png in C++
risposta
C'è un wrapper C++ per libpng
chiamato Png++
. Controllalo here o semplicemente google it.
Hanno una vera interfaccia C++ con modelli e tale che utilizza libpng
sotto il cofano. Ho trovato il codice che ho scritto molto espressivo e di alto livello.
Esempio di "generatore" che è il cuore dell'algoritmo:
class PngGenerator : public png::generator< png::gray_pixel_1, PngGenerator>
{
typedef png::generator< png::gray_pixel_1, PngGenerator> base_t;
public:
typedef std::vector<char> line_t;
typedef std::vector<line_t> picture_t;
PngGenerator(const picture_t& iPicture) :
base_t(iPicture.front().size(), iPicture.size()),
_picture(iPicture), _row(iPicture.front().size())
{
} // PngGenerator
png::byte* get_next_row(size_t pos)
{
const line_t& aLine = _picture[pos];
for(size_t i(0), max(aLine.size()); i < max; ++i)
_row[i] = pixel_t(aLine[i] == Png::White_256);
// Pixel value can be either 0 or 1
// 0: Black, 1: White
return row_traits::get_data(_row);
} // get_next_row
private:
// To be transformed
const picture_t& _picture;
// Into
typedef png::gray_pixel_1 pixel_t;
typedef png::packed_pixel_row<pixel_t> row_t;
typedef png::row_traits<row_t> row_traits;
row_t _row; // Buffer
}; // class PngGenerator
e l'uso è simile a questo:
std::ostream& Png::write(std::ostream& out)
{
PngGenerator aPng(_picture);
aPng.write(out);
return out;
}
Ci sono stati alcuni pezzi ancora mancanti libpng
(opzioni Interleaving e quali), ma francamente non li ho usati quindi andava bene per me.
È bellissimo! Grazie! – henle
Non trovo questo bellissimo. Come può essere considerato bello? Qualcuno crede davvero che questo sia un modo corretto di rappresentare un'immagine? Mi dispiace usare un linguaggio così infiammatorio, ma nulla nella programmazione mi ha frustrato al punto che l'elaborazione delle immagini PNG ha. Perché renderlo più complicato di quanto debba essere? –
Direi che libpng è ancora il modo più semplice. C'è example read -> process -> write png program, è abbastanza semplice una volta che si smuove la gestione degli errori (setjmp/longjmp/png_jmpbuf). Non diventa più semplice di così.
Sì, l'ho visto. Devo dire che ero confuso, ma ora che mi dici che è semplice, lo è davvero;) – henle
- 1. Problema con immagini PNG in C#
- 2. correzione dell'illuminazione semplice in immagini openCV C++
- 3. Libreria di immagini C semplice?
- 4. Conversione di immagini .jpg in .png
- 5. Ottimizzare .png immagini con PIL
- 6. Come salvare un PNG da JavaScript variabile
- 7. Ricerca di un buffer dei messaggi persistente semplice in Java
- 8. convertire un file png in un file pcx utilizzando C#
- 9. Come faccio a codificare un semplice buffer circolare intero in C/C++?
- 10. Buffer logici multipli in un buffer di frame reali
- 11. C#: ricerca dell'algoritmo di compressione PNG/libreria
- 12. Leggi un PNG utilizzando Win32/C++
- 13. come salvare le immagini visualizzate in Webview?
- 14. Unisci immagini png in un'unica immagine in WPF
- 15. Come mostrare le immagini in visualizzazione di immagini in un semplice adattatore?
- 16. Creazione di un file PNG in Python
- 17. Esiste un modo semplice per testare due PNG per l'uguaglianza?
- 18. Converti immagini png in 9 patch in Android Studio
- 19. paperclip - conversione di immagini tiff in jpg o png
- 20. Rinominare un gruppo di immagini PNG con estensione ".jpg" su ".png"
- 21. combinare due immagini trasparenti PNG
- 22. Utilizzo di immagini PNG nei siti Web
- 23. Seleziona tutte le immagini PNG
- 24. StreamReader e buffer in C#
- 25. C# Salvataggio di immagini enormi
- 26. Come salvare un oggetto QPixmap in un file?
- 27. Come creare un png trasparente in bianco in Objective-C?
- 28. Come posso sovrapporre immagini (png) all'interno di un sito web?
- 29. È necessario salvare e riattivare UIImages utilizzando il buffer
- 30. Trasparenza alfa nelle immagini indicizzate-png
È possibile usare [Imagemagick] (http://www.imagemagick.org/script/index.php) ma ha molte altre cose. –