Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - ImageFormat decente
Forum - C# / VB.NET - ImageFormat decente

Avatar
Question (Normal User)
Rookie


Messaggi: 58
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 23:50
Lunedì, 20/06/2011
Salve a tutti,
ho creato un programma che necessita di salvare un'immagine alla fine di un processo e vorrei farlo senza farle perdere eccessiva qualità e senza raddoppiarne il peso.
Il problema è che con il metodo Save di Image posso scegliere tra una quantità limitata di formati.

Non riesco a trovarne uno che mantenga la qualità senza incrementare eccessivamente lo spazio occupato dal file.
Ora come ora ho scelto di usare PNG ma anche lui non scherza affatto: una foto da 9mb viene incrementata a 19mb, mentre formati come JPEG e GIF fanno diventare l'immagine uno schifo :-|

Qualcuno ha idee migliori? :hail:


EDIT (ecco il codice richiesto):
Codice sorgente - presumibilmente VB.NET

  1. ''' <summary>Draws the logo on the specified image. The location is oriented by ImageAlignment</summary>
  2.     ''' <param name="Immy">Image where the logo has to be painted</param>
  3.     ''' <param name="Logo">Image that has to be painted</param>
  4.     ''' <param name="Distance">Logo distance from borders</param>
  5.     Friend Sub WaterMark(ByVal Immy As Image, ByVal Logo As Image, ByVal Distance As Size)
  6.         Dim X, Y As Int32
  7.  
  8.         Select Case LogoAlignment 'set coordinates
  9.             Case Alignment.TopLeft
  10.                 X = Distance.Width
  11.                 Y = Distance.Height
  12.             Case Alignment.TopRight
  13.                 X = Immy.Width - (Distance.Width + Logo.Width)
  14.                 Y = Distance.Height
  15.             Case Alignment.BottomLeft
  16.                 X = Distance.Width
  17.                 Y = Immy.Height - (Distance.Height + Logo.Height)
  18.             Case Alignment.BottomRight
  19.                 X = Immy.Width - (Distance.Width + Logo.Width)
  20.                 Y = Immy.Height - (Distance.Height + Logo.Height)
  21.         End Select
  22.  
  23.         Using Painter As Graphics = Graphics.FromImage(Immy) 'paint
  24.             Painter.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
  25.             Painter.DrawImage(Logo, X, Y, Logo.Width, Logo.Height)
  26.         End Using
  27.     End Sub
  28.  
  29.     ''' <summary>Defines the logo watermarking orientation</summary>
  30.     Friend Enum Alignment
  31.         TopLeft
  32.         TopRight
  33.         BottomLeft
  34.         BottomRight
  35.     End Enum


Ultima modifica effettuata da Question il 23/06/2011 alle 14:59


Ma ovviamente x64
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Up
1
Down
V
Segnala al moderatore
Postato alle 1:10
Martedì, 21/06/2011

credo che lavorando un po con l'oggetto Image o Bitmap puoi riuscire a specificare i parametri di compressione, in questo modo lo adatti alle tue necessità.


Ingegnere Informatico
https://ldlagency.it
PM
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 10:26
Martedì, 21/06/2011
Non è il formato png che ti gonfia l'immagine, probabilmente è quello che ci fai tu sopra. :yup:
Il formato PNG sarebbe il migliore, perchè applica una compressione lossless e quindi la qualità dell'immagine rimane invariata, mentre con JPEG la compressione è lossy e l'immagine perde qualità.

Ma questo non è possibile :S Io ci disegno sopra un'altra immagine rimpicciolita, tutto qui. - Question - 21/06/11 13:28
quanto sono grandi le due immagini? e in che formato sono? e come salvi l'immagine? - Qwertj - 21/06/11 18:37
Come salvo l'immagine te l'ho scritto sopra, la grandezza può variare ma 20mb li raggiunge anche con disegnata sopra un'immagine 96x96 (la disegno con graphics e interpolazione high quality bicubic) - Question - 22/06/11 16:28
posta il codice! - Qwertj - 22/06/11 16:43
Modificato il post principale - Question - 23/06/11 14:58
uhm strano, che immagini usi di partenza? grandezze esatte - Qwertj - 23/06/11 18:26
1600x1280 1,83MB + (400x532 53,2KB ridimensionata a 134x158) = 3,80MB - Question - 24/06/11 10:30
non so cosa dirti... O.o - Qwertj - 24/06/11 14:09


Blog:
<coming soon>
Appalo:
http://www.appalo.it/
PM