Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Non sono quindi le operazioni che faccio alla grafica, ma il solo salvataggio.
Se creo una grafica bmp,4bpp,360x360dpi, posso ruotarla, ingrandirla, tagliarla senza che i parametri cambino, quando la vado a salvare devo specificare in che formato la voglio salvare.
Esatto è un parametro del contenitore (formato) di salvataggio, non di come è reppresentata la bitmap internamente, se l'immagine è a 8bpp, sia che la salvi in TIF o che la salvi in BMP sempre a 8bpp resta, poi ci sono i contenitori (formati) che sono sempre a 24bpp come il JPG o 8bpp come il GIF, ecc.
Ultima modifica effettuata da Carlo il 07/08/2021 alle 23:45
Quindi, visto che devo fare varie operazioni alla grafica prima di salvarla, sarebbe furbo usare un formato che non sia troppo pesante e poi solo alla fine convertirlo nel formato con le caratteristiche che mi servono. Possibile?
se le operazioni sono di riscalatura, ritaglio, rotazioni non multiple di 90° con matenimento della qualità usando algoritmi di antialias e scalatura avanzati, si entra in un mondo dove la matematica avanzata la fa da padrone, non alla portata del programmatore medio.
per questo ci sono le GDI+ che contemplano praticamente tutto e ti risolvono i problemi. Ma come sai operano solo con immagini a pixel non indicizzati, nel tuo caso si impongono delle conversioni.
se le operazioni sono semplici, ma con parametri rigidi come i tuoi, forse conviene operare sui byte senza aiuti.
L'unico vero problema, ma forse sono io che non ho le competenze adeguate, è la creazione della palette personalizzata quando si converte un'immagine a pixel non indicizzati in un'immagine a pixel indicizzati.
Non va trascurato il tempo, se le immagini sono molto grandi, la conversione tra i formati di pixel è onerosa.
Ultima modifica effettuata da Carlo il 08/08/2021 alle 13:16
Abbastanza chiaro.
Ho iniziato a scrivere il programma sfruttando anche i preziosi insegnamenti di Carlo(grazie) ma ovviamente ci sono dei problemi che non capisco. Ho provato ogni singolo blocco del programma separatamente e funzionano tutti, adesso che li sto componendo , iniziano i problemi strani .
Allego il codice incriminato
Codice sorgente - presumibilmente VB.NET
larghezzapixel = Math.Truncate(larghezzamm * mmpixel)-1'converto le dimensioni del pannello da mm a pixel
immagine.Save("C:\"& name &".bmp", Imaging.ImageFormat.Bmp)
immagine.Save("C:\"& name &".tiff", Imaging.ImageFormat.Tiff)
immagine.Dispose()
EndSub
Provo a spiegare cosa stavo tentando di fare
Devo creare 4 grafiche ,in pratica un rettangolo bianco con al suo interno in una data posizione un rettangolo nero( poi dovrò associare al nero un determinato valore essendo un 4bpp ma utilizzato solo 3 bpp)ogni grafica ha alcuni parametri uguali alle altre e altri diversi .Avevo pensato di creare una Sub che si incarica di fare tutto , io le passo ogni volta i dati e poi la chiamo 4 volte. Dopo ogni chiamata salvo la grafica con un determinato nome .
Tutte le volte mi da errore "System.IndexOutOfRangeException: 'Indice oltre i limiti della matrice.'"
nella riga "colorValues(ind) = colore"
Carlo mi ha sempre detto che se voglio una grafica da 1000 pixel devo scrivere 999 perchè viene contato anche lo 0 , infatti quando dichiaro le dimensioni sottraggo 1 .
Però mi da errore .....Sicuramente mi sono dormito qualcosa .
Grazie
Ultima modifica effettuata da bernie il 08/08/2021 alle 17:31
La prime cose da sapere per verificare quanto hai scritto, sono i valori in mm a noi sconosciuti.
Quando sarà risolto l'errore "System.IndexOutOfRangeException: 'Indice oltre i limiti della matrice.'", ad ogni case generi due rettangoli, ma i rettangoli non finiranno nella stessa immagine, il rettangolo bianco viene creato in una bitmap e salvato, poi il rettangolo nero viene creato in un'altra bitmap e sovrascrive il file dove c'era il rettangolo bianco.
Stessa cosa se analizzi il for, non cambiando mai il nome i files vengono sovrascritti e alla fine ne troverai solo due...
Se mi metti in condizione di provarlo con i valori che hai usato tu...
Ultima modifica effettuata da Carlo il 09/08/2021 alle 12:32
Hai ragione, larghezzamm 1000, altezzamm 2000, framemm65,gapmm5, mmpixel 14,17 Perché dici che non cambio nome? Ogni case ha un valore diverso di nome che passo alla sub.
Perché dici che non cambio nome? Ogni case ha un valore diverso di nome che passo alla sub.
Ho guardato meglio, è scritto in grigetto, si il nome lo cambi, resta l'errore che all'interno di un case richiami due volte la routine rettangolo che salva due volte con lo stesso nome i due rettangoli creati su due bitmap diverse, di fatto troverai salvato solo il secondo rettangolo.
Entro domani faccio una verifica su VS, solo leggendo non posso dire di più.
Non capisco, nel tuo esempio chiamavi 3 volte la funzione rettangolo e crearvi una grafica con 3 rettangoli, uno bianco, uno grigio e uno nero. La differenza che vedo è che mentre nel tuo esempio salvavi il bmp dopo le tre chiamate alla funzione, io salvo il bmp nella funzione. Ed è logico, volevo evitare di scrivere il salvataggio 4 volte. Al limite potrei creare una funzione per salvare. Era solo per rendere il programma più leggibile. Ho sbagliato? Grazie