Quantcast
Channel: Visual Basic Tips and Tricks
Viewing all articles
Browse latest Browse all 2212

Vorrei capire di più sulla grafica

$
0
0

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 .


Viewing all articles
Browse latest Browse all 2212