2012-06-13 16 views
5

Così ho creato questo programma per un gioco e ho bisogno di aiuto per renderlo un po 'più automatico.Manipolazione immagini C++

Il programma acquisisce un'immagine e quindi la visualizza. Lo sto facendo su trame in OpenGL. Quando prendo lo screenshot del gioco, di solito è qualcosa di 700x400. Inserisco l'altezza e la larghezza nel mio programma, ridimensiono l'immagine a 1024x1024 (rendendola una texture POT per una migliore compatibilità) aggiungendo uno spazio vuoto (l'immagine originale rimane nell'angolo in alto a sinistra e arriva fino a (700.400) e il il resto è solo vuoto, qualcuno conosce il termine per questo?) e poi lo carica nel mio programma e regola gli angoli in modo da mostrare solo la parte da (0,0) a (700,400).

Ecco come gestisco la visualizzazione dell'immagine. Ora, vorrei rendere automatico questo. Quindi prenderei un'immagine 700x400, passala al programma che otterrebbe la larghezza e l'altezza dell'immagine (700x400), ridimensionala a 1024x1024 aggiungendo uno spazio vuoto e quindi caricandola.

Così qualcuno sa che una libreria C++ è in grado di farlo? Comunque continuerei a prendere lo screenshot manualmente.

Sto usando la libreria di immagini OpenGL semplice (SOIL) per caricare l'immagine (.bmp) e convertirla in una trama.

Grazie!

risposta

1

Non è necessario ridimensionare aggiungendo spazi vuoti per visualizzare correttamente l'immagine. In effetti, è un modo davvero poco efficace per farlo, soprattutto perché si memorizzano le immagini in formato .bmp.

SOIL è in grado di aggiungere automaticamente lo spazio vuoto quando si caricano le trame - forse basta provare a caricare il file così com'è, senza eseguire alcuna operazione.

dal suolo Documentation:

può ridimensionare automaticamente l'immagine al formato immediatamente maggiore potenze di due

caricare texture Rettangolari per elementi GUI o schermate iniziali (richiede GL_ARB/EXT/NV_texture_rectangle)

In ogni caso, non è necessario utilizzare la trama per visualizzare i pixel sulla s creen. Presumo che tu non stia utilizzando gli shader per il rendering - se tutto passa attraverso una pipeline fissa, c'è la funzione glDrawPixels, che sarà molto più semplice. Ricordati di cambiare la tua chiamata SOIL allo SOIL_load_image.

+0

"È possibile ridimensionare automaticamente l'immagine alla successiva potenza massima di due dimensioni" - Ho davvero perso la parola "automaticamente". : D Proverò quello che hai detto. Grazie! – Tuntuni

+0

Ho provato a caricarlo senza ridimensionarlo, ma risulta strano. Sono abbastanza sicuro che i miei angoli sono al loro posto. L'immagine diventa anche in scala di grigi e, mentre la ridimensiono, recupera parte del colore. Potrebbe fornirmi degli exmaples su SOIL_load_image e glDrawPixels o su un collegamento? Grazie. – Tuntuni

+0

Forse prova "SOIL_FLAG_POWER_OF_TWO' o" SOIL_FLAG_TEXTURE_RECTANGLE ". –

Problemi correlati