importare file jpg
importare file jpg
Quando importo un file jpg in GM viene sempre trasformato in png.
C'è una maniera per avere in GM sprite in jpg? o almeno un modo per rendere le foto/sprite meno pesanti senza cambiarne le dimensioni?
C'è una maniera per avere in GM sprite in jpg? o almeno un modo per rendere le foto/sprite meno pesanti senza cambiarne le dimensioni?
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: importare file jpg
Forse sparero' una cavolata.sfigatto ha scritto:Quando importo un file jpg in GM viene sempre trasformato in png.
C'è una maniera per avere in GM sprite in jpg? o almeno un modo per rendere le foto/sprite meno pesanti senza cambiarne le dimensioni?
Detto cio', non potresti leggerti manualmente i byte dall'immagine e caricarla in una surface e dopodiche', quando vuoi salvarla, (sempre se ne hai bisogno) salvarla in .jpg.
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: importare file jpg
1) Dubito che l'aumento di peso sia così sostanziale, sopratutto in un'era dove i giochi pesano decine di giga l'uno e senza internet non sopravvivi. La differenza non la sentirà nessuno.
2) A parte gli sfondi tutti gli sprite avranno il canale alpha per la trasparenza, quello non esiste in jpg quindi non potresti comunque usarlo.
3) Jpg fa schifo, l'immagine viene molto più brutta, ad eccezione per i siti web e al massimo fotografie casual è un formato che al giorno d'oggi non dovrebbe essere mai usato, pena la morte.
E poi tutti parlano di 4K e si usa ancora il jpg, tanto vale tornare a 640x480.
2) A parte gli sfondi tutti gli sprite avranno il canale alpha per la trasparenza, quello non esiste in jpg quindi non potresti comunque usarlo.
3) Jpg fa schifo, l'immagine viene molto più brutta, ad eccezione per i siti web e al massimo fotografie casual è un formato che al giorno d'oggi non dovrebbe essere mai usato, pena la morte.
E poi tutti parlano di 4K e si usa ancora il jpg, tanto vale tornare a 640x480.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: importare file jpg
Jak ha scritto:1) Dubito che l'aumento di peso sia così sostanziale, sopratutto in un'era dove i giochi pesano decine di giga l'uno e senza internet non sopravvivi. La differenza non la sentirà nessuno.
2) A parte gli sfondi tutti gli sprite avranno il canale alpha per la trasparenza, quello non esiste in jpg quindi non potresti comunque usarlo.
3) Jpg fa schifo, l'immagine viene molto più brutta, ad eccezione per i siti web e al massimo fotografie casual è un formato che al giorno d'oggi non dovrebbe essere mai usato, pena la morte.
E poi tutti parlano di 4K e si usa ancora il jpg, tanto vale tornare a 640x480.
.jpg (secondo me) "va bene" solamente per le foto, dato che la trasparenza non "esiste" in una foto.
Anche se, giustamente la compressione e' un poco piu' schifosa.
Re: importare file jpg
Infatti sto facendo un piccolo gioco in cui una foto viene scomposta e poi bisogna ricomporla, per questo pensavo che il formato JPG. fosse adatto..jpg (secondo me) "va bene" solamente per le foto, dato che la trasparenza non "esiste" in una foto.
Anche se, giustamente la compressione e' un poco piu' schifosa.
La vera necessità di trasformare le foto da PNG. a JPG. nasce dal fatto che volevo provare a vedere come funzionava su Android.
Essendo il gioco composto da circa 200 foto trasformando le foto in un formato che occupa meno spazio ridurrei di molto lo spazio che il gioco occupa su cellulare.
In alternativa se non si possono trasformare le foto in JPG. dovrei trovare un modo per rendere le foto più leggere , ma senza modificarne le dimensioni di altezza e larghezza.
- cp94
- Moderatore
- Messaggi: 2789
- Iscritto il: 04/07/2009, 19:18
- Specialità: ddd
- Località: Brescia
- Contatta:
Re: importare file jpg
Oppure ti potresti tenere le foto in formato jpg in una cartella e importarle al momento come sprite tramite sprite_add, in questo modo le immagini rimarranno jpg e gm non le convertirà in png, tranne quella caricata al momento ovviamente.
Re: importare file jpg
Oppure ti potresti tenere le foto in formato jpg in una cartella e importarle al momento come sprite tramite sprite_add, in questo modo le immagini rimarranno jpg e gm non le convertirà in png, tranne quella caricata al momento ovviamente.
Difatti ho scoperto la funzione sprite_add e pensavo potesse risolvere i miei problemi, ma mi sono posto un paio di domande.
Per prima cosa ho fatto una semplice prova per vedere se riuscivo ad usarla e non ci riesco.
ho messo in un oggetto senza sprite il seguente codice in create, ma l'oggetto rimane senza sprite.
Codice: Seleziona tutto
spr_player = sprite_add(working_directory+"\Desktop\win.jpg",0,false,false,0,0);
sprite_index=spr_player
finche è il gioco è nel mio pc, non c'è problema , GameMaker sa dove trovarle, ma se dovessi asportare il progetto su andorid cosa succederebbe?
Forse raccoglie le foto quando compila il progetto?
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: importare file jpg
Non vorrei sbagliare, ma il fatto che non ti carica lo sprite e' perche' working_directory restituisce la directory dentro la cartella %appdata% a causa della sandbox.sfigatto ha scritto:Codice: Seleziona tutto
spr_player = sprite_add(working_directory+"\Desktop\win.jpg",0,false,false,0,0); sprite_index=spr_player
Comunque, come ha detto pure Jak, non ha senso voler continuare ad utilizzare jpg, non sono quei 10-20mb a fare la differenza. Ormai esiste il 4G e telefoni con 64GB di memoria interna...
- cp94
- Moderatore
- Messaggi: 2789
- Iscritto il: 04/07/2009, 19:18
- Specialità: ddd
- Località: Brescia
- Contatta:
Re: importare file jpg
Se i file stanno nella stessa cartella dell'exe o del gmk, gmz, ecc.. ti basta fare:
Codice: Seleziona tutto
working_directory + "/win.jpg"
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: importare file jpg
Working_directory è ora opzionale inoltre molto meglio usare gli included files e lasciare gestire a GM le cagate di file system ed affini. Lavori anche meglio con installer/aggiornamenti/mobile se lasci fare a GM.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: importare file jpg
Ora ho inserito gli sprite come included, ho fatto una prova in un oggetto e tutto funziona.
si è però verificato un altro problema, ma non so se faccio bene a scrivere qui o se dovrei scrivere su questo post che avevo aperto tempo fa http://gmitalia.altervista.org/forum/vi ... =5&t=13877 .
Riassumo brevemente il post.
Ho una ds_list in cui sono incamerati gli sprite/foto di cui ho parlato in questo post.
Una volta risolte le foto vengono spostate in una nuova ds_list, ed il tutto viene salvato con dei file ini in maniera che quando si riapre il gioco le foto da risolvere non saranno mai quelle già risolte e se si vuole c'è una opzione per giocare con le foto già risolte.
Prima di cambiare gli sprite con gli included files tutto funzionava perfettamente.
Ora con gli included files quando il gioco parte per la prima volta tutto funziona bene, ma se faccio partire il gioco una seconda, se nella partita precedente c'è stato un trasferimento da una ds_list all'altra, non appare più lo sprite della foto in nessuna delle due liste.
Posto l'intero codice, ma credo che il problema sia solo nella immissione dei dati nella Ds_list in scr_list_immagine
Ho un primo oggetto nella pagina di presentazione del gioco in cui richiamo i file INI, che ovviamente la prima volta che si apre il gioco ancora non esiste:
Quando il gioco parte crea le ds_list
scr_list_immagine (CON GLI INCLUDED FILES)
Nell'oggetto in cui le immagini vengono spostate da una lista all'altra
Codice: Seleziona tutto
spr= sprite_add (working_directory+"\winn.jpg",0,0,0,0,0)
sprite_index = spr
si è però verificato un altro problema, ma non so se faccio bene a scrivere qui o se dovrei scrivere su questo post che avevo aperto tempo fa http://gmitalia.altervista.org/forum/vi ... =5&t=13877 .
Riassumo brevemente il post.
Ho una ds_list in cui sono incamerati gli sprite/foto di cui ho parlato in questo post.
Una volta risolte le foto vengono spostate in una nuova ds_list, ed il tutto viene salvato con dei file ini in maniera che quando si riapre il gioco le foto da risolvere non saranno mai quelle già risolte e se si vuole c'è una opzione per giocare con le foto già risolte.
Prima di cambiare gli sprite con gli included files tutto funzionava perfettamente.
Ora con gli included files quando il gioco parte per la prima volta tutto funziona bene, ma se faccio partire il gioco una seconda, se nella partita precedente c'è stato un trasferimento da una ds_list all'altra, non appare più lo sprite della foto in nessuna delle due liste.
Posto l'intero codice, ma credo che il problema sia solo nella immissione dei dati nella Ds_list in scr_list_immagine
Ho un primo oggetto nella pagina di presentazione del gioco in cui richiamo i file INI, che ovviamente la prima volta che si apre il gioco ancora non esiste:
Codice: Seleziona tutto
if (file_exists("Save.ini"))
{
ini_open("Save.ini");
global.immagine = ds_list_create();
ds_list_read(global.immagine,ini_read_string("save","record",0));
ini_close();
}
if (file_exists("Save1.ini"))
{
ini_open("Save1.ini");
global.risolta = ds_list_create();
ds_list_read(global.risolta,ini_read_string("save1", "record1",0));
ini_close();
}
Codice: Seleziona tutto
if !file_exists("save.ini") // se non esiste il file ini
{
scr_list_immagine(); //crea la ds list
}
if !file_exists("save1.ini")
{
global.risolta= ds_list_create();//crea lista vuota, dove vengono spostate le foto risolte
}
scr_list_immagine (CON GLI INCLUDED FILES)
Codice: Seleziona tutto
global.immagine= ds_list_create();
ds_list_add(global.immagine,sprite_add (working_directory+"\g1.jpg",0,0,0,0,0));
ds_list_add(global.immagine,sprite_add (working_directory+"\g2.jpg",0,0,0,0,0));
ds_list_add(global.immagine,sprite_add (working_directory+"\g3.jpg",0,0,0,0,0));
ds_list_shuffle(global.immagine);
/////QUI SOTTO HO SCRITTO ANCHE LA VECCHIA DS LIST CHE ORA HO CANCELLATO CHE PRENDEVA DIRETTAMENTE GLI SPRITE E CON CUI TUTTO FUNZIONAVA BENE)
randomize();
global.immagine= ds_list_create();
ds_list_add(global.immagine,im1);
ds_list_add(global.immagine,im2);
ds_list_add(global.immagine,im3);
ds_list_shuffle(global.immagine);
Nell'oggetto in cui le immagini vengono spostate da una lista all'altra
Codice: Seleziona tutto
trasferimento_sprite= ds_list_find_value(global.immagine,ds_list_size(global.immagine)-1) //prende la foto appena risolta
alarm[4]=20 //crea la scritta che segnala che hai risolto la foto
tempo=0 //azzera il countdown del timer
stoptempo=1//blocca il countdown
ini_open("save.ini");
ds_list_delete(global.immagine,ds_list_size(global.immagine)-1);//cancella la foto dalla lista
ini_write_string("save","record",ds_list_write(global.immagine));
ini_close();
ini_open("save1.ini");
ds_list_add(global.risolta,trasferimento_sprite);
ini_write_string("save1", "record1",ds_list_write(global.risolta));
ini_close();
- Xxshark888xX
- Membro d'elite
- Messaggi: 1497
- Iscritto il: 30/05/2012, 19:17
- Specialità: Un poco di tutto
- Uso: GM:Studio 1.4 Pro
- Località: Earth
- Contatta:
Re: importare file jpg
Premetto che non ho letto tutto il codice da te postato, ma mi viene da pensare, che, magari il gioco ogni volta che si avvia carica gli sprite e gli aggiunge nella ds_list, quindi, dovresti fare qualche controllo per verificare se il gioco e' gia' stato avviato in precedenza o no.
(Quindi salvare su un file di testo (anche ini) una piccola variabile bool che andra' letta all'avvio per verificare cio')
P.S: Oppure fare un controllo diretto sul file ini, se gia' esiste, vuol dire che il gioco e' gia' stato avviato in precedenza.
(Quindi salvare su un file di testo (anche ini) una piccola variabile bool che andra' letta all'avvio per verificare cio')
P.S: Oppure fare un controllo diretto sul file ini, se gia' esiste, vuol dire che il gioco e' gia' stato avviato in precedenza.
-
- Admin
- Messaggi: 12355
- Iscritto il: 19/08/2009, 16:20
- Specialità: Programmazione 3D
- Uso: GM:Studio 2
- Contatta:
Re: importare file jpg
Non ho letto attentamente ma direi quanto basta in quanto pignolo su codice "fatto bene".
Salvare una lista che contiene degli sprite index che vengono caricati esternamente è concettualmente sbagliato, gli ID possono cambiare un pò quando vogliono e come vogliono ed è naturale che ad ogni avvio possano avere ID diversi e quindi rompere l'indicizzazione dei file. Salvare questo ID è qualcosa che non dovrebbe MAI essere fatto.
Consiglio piuttosto di usare delle ds_map per mappare un nome del file alla tua logica interna e poi salvare questa map di nomi di file, rende anche più facile cambiare i nomi e gestire diverse versioni del programma senza intaccare i salvataggi.
La soluzione più semplice che mi viene in mente è quella di mappare un filename all'averlo completato o meno quindi un semplice true o false. Se cicli randomicamente le immagini ti basterà ciclare finchè non troverà un'immagine libera o, se proprio non vuoi rischiare il caso limite dove impiegherà svariati minuti a trovare l'immagine giusta, scorrere tutta la map come una lista. Un procedimento per natura molto lento ma che dubito fortemente ti possa dare problemi con una manciata di immagini.
Ovviamente ci sono soluzioni più complesse ed eleganti che fondono liste e maps ma per il tuo caso penso sia un po overkill.
Ricorda, mai salvare un'ID per il quale non hai il minimo controllo.
Salvare una lista che contiene degli sprite index che vengono caricati esternamente è concettualmente sbagliato, gli ID possono cambiare un pò quando vogliono e come vogliono ed è naturale che ad ogni avvio possano avere ID diversi e quindi rompere l'indicizzazione dei file. Salvare questo ID è qualcosa che non dovrebbe MAI essere fatto.
Consiglio piuttosto di usare delle ds_map per mappare un nome del file alla tua logica interna e poi salvare questa map di nomi di file, rende anche più facile cambiare i nomi e gestire diverse versioni del programma senza intaccare i salvataggi.
La soluzione più semplice che mi viene in mente è quella di mappare un filename all'averlo completato o meno quindi un semplice true o false. Se cicli randomicamente le immagini ti basterà ciclare finchè non troverà un'immagine libera o, se proprio non vuoi rischiare il caso limite dove impiegherà svariati minuti a trovare l'immagine giusta, scorrere tutta la map come una lista. Un procedimento per natura molto lento ma che dubito fortemente ti possa dare problemi con una manciata di immagini.
Ovviamente ci sono soluzioni più complesse ed eleganti che fondono liste e maps ma per il tuo caso penso sia un po overkill.
Ricorda, mai salvare un'ID per il quale non hai il minimo controllo.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you
Re: importare file jpg
Chiedo scusa, sono giorni che sto cercando di fare come dice Jack, ma ci ho capito poco.
La soluzione più semplice che mi viene in mente è quella di mappare un filename all'averlo completato o meno quindi un semplice true o false. Se cicli randomicamente le immagini ti basterà ciclare finchè non troverà un'immagine libera o, se proprio non vuoi rischiare il caso limite dove impiegherà svariati minuti a trovare l'immagine giusta, scorrere tutta la map come una lista. Un procedimento per natura molto lento ma che dubito fortemente ti possa dare problemi con una manciata di immagini.
Ovviamente ci sono soluzioni più complesse ed eleganti che fondono liste e maps ma per il tuo caso penso sia un po overkill.
Ricorda, mai salvare un'ID per il quale non hai il minimo controllo.
Conoscevo poco le Ds_map ,le ho studiate un pochino e mi sembra che fondamentalmente sono come le Ds_list, quindi pensavo di cavarmela.
Ho la solita lista che ho trasformato in ds_map, i valori sono solo 3, ma in verità sono molti di più circa 100, ne ho messi solo 3 per semplicità.
Codice: Seleziona tutto
global.immagine= ds_map_create();
ds_map_add(global.immagine,0,sprite_add(working_directory+"\winn.jpg",0,0,0,0,0));
ds_map_add(global.immagine,0,sprite_add(working_directory+"\g24.jpg",0,0,0,0,0));
ds_map_add(global.immagine,0,sprite_add(working_directory+"\g8.jpg",0,0,0,0,0));
Re: importare file jpg
Sono ancora drammaticamente bloccato su questo problema, ora sto cercando di risolvendolo andando per gradi.
Cosi inizio dal cercare di realizzare il sistema di scelta random per le ds_map, e come al solito non funziona.
ho creato la solita ds_map :
ho poi inserito questo codice sempre in create per prendere una foto a caso, ma mi prende sempre la stessa foto.
Poi dovrei fare qualcosa di simile sempre in create:
Ma mi da sempre la prima immagine della lista non si crea alcun effetto shuffle
EDIT: mi è stato suggerito di sostituire random_range con irandom_range, e cancellare la variabile random_value_from_ds_map ed ora funziona nel modo corretto
Cosi inizio dal cercare di realizzare il sistema di scelta random per le ds_map, e come al solito non funziona.
ho creato la solita ds_map :
Codice: Seleziona tutto
global.immagine= ds_map_create();
ds_map_add(global.immagine,0,sprite_add(working_directory+"\winn.jpg",0,0,0,0,0));
ds_map_add(global.immagine,1,sprite_add(working_directory+"\g24.jpg",0,0,0,0,0));
ds_map_add(global.immagine,2,sprite_add(working_directory+"\g8.jpg",0,0,0,0,0));
Codice: Seleziona tutto
random_index = random_range(0, ds_map_size(global.immagine)-1);
Codice: Seleziona tutto
random_value_from_ds_map = global.immagine [? random_index];
sprite_index = random_value_from_ds_map
EDIT: mi è stato suggerito di sostituire random_range con irandom_range, e cancellare la variabile random_value_from_ds_map ed ora funziona nel modo corretto
Re: importare file jpg
Scusate se sono ancora qui con questo problema, ma ormai sono sul disperato andante.
Salvare una lista che contiene degli sprite index che vengono caricati esternamente è concettualmente sbagliato, gli ID possono cambiare un pò quando vogliono e come vogliono ed è naturale che ad ogni avvio possano avere ID diversi e quindi rompere l'indicizzazione dei file. Salvare questo ID è qualcosa che non dovrebbe MAI essere fatto.
Consiglio piuttosto di usare delle ds_map per mappare un nome del file alla tua logica interna e poi salvare questa map di nomi di file, rende anche più facile cambiare i nomi e gestire diverse versioni del programma senza intaccare i salvataggi.
La soluzione più semplice che mi viene in mente è quella di mappare un filename all'averlo completato o meno quindi un semplice true o false. Se cicli randomicamente le immagini ti basterà ciclare finchè non troverà un'immagine libera o, se proprio non vuoi rischiare il caso limite dove impiegherà svariati minuti a trovare l'immagine giusta, scorrere tutta la map come una lista. Un procedimento per natura molto lento ma che dubito fortemente ti possa dare problemi con una manciata di immagini.
Ovviamente ci sono soluzioni più complesse ed eleganti che fondono liste e maps ma per il tuo caso penso sia un po overkill.
Ricorda, mai salvare un'ID per il quale non hai il minimo controllo.
Non riesco praticamente a fare nulla di quello suggerito da jack, ho anche provato delle soluzioni alternative, ma non ho risolto nulla.
Credo debba ritornare al piano di Jack, ma non ho idea di come fare.
Chi c’è in linea
Visitano il forum: Bing [Bot] e 141 ospiti