Een apart probleem, waar het probleem hem denk ik zit in de dpi van een foto. Even een uitleg:
Ik ben bezig een programma te maken, dat een online fotoalbum moet genereren. Hierbij worden foto's verkleind en in een map geplaatst en bijbehorende HTML-code gebrouwen. Waarom geen bestaande oplossing?
1. Dit is leuker en leerzamer.
2. Ben vaak niet tevreden over de mogelijkheden: je kunt vaak weinig aan de 'templates' sluiten, is of te moeilijk of vaak gewoon niet mogelijk. Dat wordt bij die van mij anders
Nu het probleem: ik verklein de foto's en de verhoudingen in pixels blijven exact gelijk, maar toch is de foto misvormd, hij is in de breedte uitgerekt. Nu denk ik dat dit iets te maken heeft met de dpi, maar ik zou niet weten hoe ik dit veranderen moet.
Ik heb een stukje code voor het veranderen van de grootte van foto's van internet af en heel licht aangepast:
Het werkt allemaal prima, op de verhoudingen na. Je kunt aan onderstaande foto's zien dat ze zijn 'ingedrukt':


Iemand een oplossing?
Ik ben bezig een programma te maken, dat een online fotoalbum moet genereren. Hierbij worden foto's verkleind en in een map geplaatst en bijbehorende HTML-code gebrouwen. Waarom geen bestaande oplossing?
1. Dit is leuker en leerzamer.
2. Ben vaak niet tevreden over de mogelijkheden: je kunt vaak weinig aan de 'templates' sluiten, is of te moeilijk of vaak gewoon niet mogelijk. Dat wordt bij die van mij anders
Nu het probleem: ik verklein de foto's en de verhoudingen in pixels blijven exact gelijk, maar toch is de foto misvormd, hij is in de breedte uitgerekt. Nu denk ik dat dit iets te maken heeft met de dpi, maar ik zou niet weten hoe ik dit veranderen moet.
Ik heb een stukje code voor het veranderen van de grootte van foto's van internet af en heel licht aangepast:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| Public Function SavePhoto(ByVal src As String, ByVal dest As String, ByVal w As Integer) As Boolean Dim imgTmp As System.Drawing.Image Dim sf As Double Dim imgFoto As System.Drawing.Bitmap imgTmp = System.Drawing.Image.FromFile(src) If imgTmp.Width >= imgTmp.Height Then If (imgTmp.Width > w) Then sf = imgTmp.Width / w imgFoto = New System.Drawing.Bitmap(w, CInt(imgTmp.Height / sf)) Dim recDest As New Rectangle(0, 0, w, imgFoto.Height) Dim gphCrop As Graphics = Graphics.FromImage(imgFoto) gphCrop.SmoothingMode = SmoothingMode.HighQuality gphCrop.CompositingQuality = CompositingQuality.HighQuality gphCrop.InterpolationMode = InterpolationMode.High gphCrop.DrawImage(imgTmp, recDest, 0, 0, imgTmp.Width, imgTmp.Height, GraphicsUnit.Pixel) Else imgFoto = imgTmp End If End If If imgTmp.Width < imgTmp.Height Then If (imgTmp.Height > w) Then sf = imgTmp.Height / w imgFoto = New System.Drawing.Bitmap(CInt(imgTmp.Width / sf), w) Dim recDest As New Rectangle(0, 0, imgFoto.Height, w) Dim gphCrop As Graphics = Graphics.FromImage(imgFoto) gphCrop.SmoothingMode = SmoothingMode.HighQuality gphCrop.CompositingQuality = CompositingQuality.HighQuality gphCrop.InterpolationMode = InterpolationMode.High gphCrop.DrawImage(imgTmp, recDest, 0, 0, imgTmp.Width, imgTmp.Height, GraphicsUnit.Pixel) Else imgFoto = imgTmp End If End If 'Dim myImageCodecInfo As System.Drawing.Imaging.ImageCodecInfo Dim myEncoder As System.Drawing.Imaging.Encoder Dim myEncoderParameter As System.Drawing.Imaging.EncoderParameter Dim myEncoderParameters As System.Drawing.Imaging.EncoderParameters Dim arrayICI() As System.Drawing.Imaging.ImageCodecInfo = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders() Dim jpegICI As System.Drawing.Imaging.ImageCodecInfo = Nothing Dim x As Integer = 0 For x = 0 To arrayICI.Length - 1 If (arrayICI(x).FormatDescription.Equals("JPEG")) Then jpegICI = arrayICI(x) Exit For End If Next myEncoder = System.Drawing.Imaging.Encoder.Quality myEncoderParameters = New System.Drawing.Imaging.EncoderParameters(1) myEncoderParameter = New System.Drawing.Imaging.EncoderParameter(myEncoder, 90) myEncoderParameters.Param(0) = myEncoderParameter imgFoto.Save(dest, jpegICI, myEncoderParameters) imgFoto.Dispose() imgTmp.Dispose() Return True End Function |
Het werkt allemaal prima, op de verhoudingen na. Je kunt aan onderstaande foto's zien dat ze zijn 'ingedrukt':


Iemand een oplossing?