Italian Ruotare un'immagine

AlpVir

Well-Known Member
Licensed User
Longtime User
Qualcuno mi sa spiegare perchè il seguente spezzone di codice fa il suo sporco lavoro (ossia ruotare di 90 gradi un'immagine) ma l'immagine ruotata è ben più pesante dell'originale ?
Di un fattore circa uguale a 8 (coincidenza ?)
Precisamente da 1920x1080 e 123 KB si passa a 1080x1920 e 972 KB.
C'è un modo per ottenere lo stesso risultato senza che l'output sia così pesante ?
Grazie per l'attenzione.

B4X:
'--- ruoto Main.GlobalFotoXXX
        Dim b1 As Bitmap
        Dim B2 As Bitmap
        b1=LoadBitmap(Main.folderPath, Main.GlobalFotoXXX)
        B2=b1.Rotate (90)
        Dim out As OutputStream=File.OpenOutput(File.DirInternal,"tmp.png",False)
        B2.WriteToStream(out,"80","PNG")
        out.Close
        '--- debug
        File.Copy(File.DirInternal, "tmp.png",Main.folderPath, "tmp_ruotato_90.png")
 

sirjo66

Well-Known Member
Licensed User
Longtime User
..... potrebbe forse c'entrare qualcosa il grado di qualità ??
L'immagine da 123 KB era compresso (ad esempio) con una qualità di 50, mentre tu lo stai facendo a 80 (il default sarebbe comunque 75) per cui lo stai salvando con una qualità più alta e quindi necessita di più KB
..... ho detto una scemata ???
 

AlpVir

Well-Known Member
Licensed User
Longtime User
Trovato l'arcano.
L'immagine tmp.png è stata creata da un'altra sub (TakePicture) che, come si intuisce, scatta una foto e salva su un file.
Però il nome di questo file ha estesione .png ma l'istruzione che c'è in take picture è :
B.WriteToStream(out, 80, "JPEG")
Modificandolo così :
B.WriteToStream(out, 80, "PNG")
il peso di entrambe le immagini (tmp.png e tmp_ruotato_90.png) è uguale (1.36 MB).
Non mi addentro nel capire il perchè di questo malfunzionamento, dovuto ad mio mio errore.
Mi basta constatare che le due immagini sono perfettamente uguali, tranne il loro orientamento: è quello che volevo.
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…