Nel tentativo di migliorare un mio programma di grafica nella guida di VB2008 mi sono imbattuto in questo codice che ho testato . Il codice genera da una immagine tre immagini con rapporto di compressione : 0 , 50 , 100 (COSA non ho ben capito visto che non è % ma Single, almeno da quanto si evince dal codice) fosse in % Il valore 0 dovrebbe dare un immagine nulla, invece genera una immagine con notevole effetto pixel ma comunque visibile . Gli altri 2 valori : 50 e 100 generano immagini che ad occhio non hanno ad ingrandimento 4X visibili differenze. Dalla immagine che segue si vede lo spazio disco delle 4 immagini, la prima è l’originale di partenza le altre sono dettagliate dal nome.
Imports System.Drawing.Imaging
PublicClass Form1 PrivateSub VaryQualityLevel() ' Get a bitmap. Dim bmp1 AsNew Bitmap("g:\Koala.jpg") Dim jgpEncoder As ImageCodecInfo = _ GetEncoder(ImageFormat.Jpeg) ' Create an Encoder object based on the GUID ' for the Quality parameter category. Dim myEncoder As System.Drawing.Imaging.Encoder = _ System.Drawing.Imaging.Encoder.Quality ' Create an EncoderParameters object. ' An EncoderParameters object has an array of 'EncoderParameter() ' objects. In this case, there is only one ' EncoderParameter object in the array. Dim myEncoderParameters AsNew EncoderParameters(1) Dim myEncoderParameter AsNew _ EncoderParameter(myEncoder, 50& myEncoderParameters.Param(0) = myEncoderParameter bmp1.Save("g:\TestPhotoQualityFifty.jpg", jgpEncoder, _ myEncoderParameters) myEncoderParameter = New _ EncoderParameter(myEncoder,
100& myEncoderParameters.Param(0) = myEncoderParameter bmp1.Save("g:\TestPhotoQualityHundred.jpg", _ jgpEncoder, myEncoderParameters) ' Save the bitmap as a JPG file with zero quality 'level compression. myEncoderParameter = New
EncoderParameter(myEncoder, 0& myEncoderParameters.Param(0) = myEncoderParameter bmp1.Save("g:\TestPhotoQualityZero.jpg", jgpEncoder, _ myEncoderParameters) EndSub'VaryQualityLevel
PrivateFunction GetEncoder(ByVal format As ImageFormat) _ As ImageCodecInfo
Dim codecs As ImageCodecInfo() = _ ImageCodecInfo.GetImageDecoders() Dim codec As ImageCodecInfo ForEach codec In codecs If codec.FormatID = format.Guid Then Return codec EndIf Next codec ReturnNothing
EndFunction
PrivateSub Form1_Load(ByVal sender AsObject, ByVal e _ As System.EventArgs) HandlesMe.Load VaryQualityLevel() EndSub EndClass |
Si nota subito la riduzione dello spazio disco. Domanda come faccio a sapere il valore di compressione dell’immagine originale ? Da 763 Kb. In considerazione che se vado a leggere la risoluzione di tutte 4 le immagini è sempre 96 Dpi pollice , e la dimensione immagine è sempre 1024 x 768 px ? Se qualcuno mi aiuta a capire qualcosa sarò grato . Come posso eventualmente leggere i meta dati dell’immagine Jpg forse potrei capirci qualcosa in più. !!
BUONA PASQUA A TUTTI e grazie .