webForumDet fria alternativet

GDI+, problem med skalning av bilder

.NET

2 svar · 1 246 visningar · startad av fredrik

Medlem sedan dec. 19991 072 inlägg
Frågan#1

Jag försöker skala om bilder i storlek (JPG). Bilderna är ganska stora, ca 1600px i bredd och ska bli 600px. Dessutom är de "studio"-fotograferade så kvalitén är väldigt hög.

Att komprimera bilderna med JPG och att förminska dem är i sig inget problem. Problemet är att .NET verkar ha problem med att förminska väldigt detalj-rika bilder.

Exempel kan vara en detaljerad motorcykel-motor.

När jag i Photoshop förminskar bilden gör den små-detaljer "suddiga" vilket ger bilden ett mjukare intryck. ".NET" däremot försöker behålla även små-detaljer vilket resulterar i "kluddiga" skarpa kontraster.

"Vanliga" bilder funkar annars perfekt, tex. bilder på natur, människor osv.

Jag har provat med alla möjliga inställningar...

Dim image As System.Drawing.Image = image.FromFile(szFileName)
        Dim bmp As New Bitmap(iWidth, iHeight)
        Dim gr As Graphics = Graphics.FromImage(bmp)

        gr.DrawImage(image, 0, 0, iWidth, iHeight)
        gr.Save()

        gr.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
        gr.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
        gr.CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
        gr.CompositingMode = Drawing.Drawing2D.CompositingMode.SourceCopy

gr.save()

Dim eps As EncoderParameters = New EncoderParameters(2)
        eps.Param(0) = New EncoderParameter(Encoder.Quality, lCompression)
        eps.Param(1) = New EncoderParameter(New Encoder(Encoder.Compression.Guid), EncoderValue.CompressionLZW)
        Dim ici As ImageCodecInfo = GetEncoderInfo("image/jpeg")

        bmp.Save(szNewFileName, ici, eps)
        
        image.Dispose()
        bmp.Dispose()

Bilden jag testar med är: http://server.webwerkstaden.se/Cykel_01.jpg) OBS! Ladda hem bilden och öppna lokalt för browsern skalar annars ner bilden vilket gör den suddig)

Resultatet jag får av denna bild är:
http://server.webwerkstaden.se/NYCykel_01.jpg

Vilket är hyffsat...men inte bra nog....

Några tips?

Medlem sedan dec. 19996 522 inlägg
#2

Prova att avnända den inbyggda funktionen för att skapa thumbnails, hade samma problem som du, gav upp och använde den färdiga med dvs. modifieringar.

Medlem sedan dec. 19991 072 inlägg
#3

Tack för tipset, körde med det först...

har dock löst problemet nu. I min första kod hade jag ju kört:
gr.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic

efter det att jag gjorde "DrawImage".
Jag var helt enkelt tvungen att göra det innan. Ganska logiskt egentligen...

253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)