Hallo,
Ik ben bezig met het proberen om een (animated) image te verkleinen/vergroten volgens een variabele waarde. (Het gaat niet altijd om een animated image daarom de "ImageAnimator.CanAnimate") Voor zover google me kon vertellen moest ik eerst alle frames afzonderlijk bewerken. Dit heb ik ook gedaan in de onderstaande code. Nu krijg ik echter enkel de laatste frame te zien.
Nu vermoed ik dat dit komt doordat ik men "newImage" een bitmap toewijs en deze geen meerdere frames bevat en ik eigenlijk een image moet hebben met evenveel frames erin als de oorspronkelijke image. Of kan het zijn dat ik dit volledig mis zie? Indien dit het geval is zou ik mij een image moeten kunnen toewijzen die de juiste afmetingen heeft en de nodige aantal frames heeft.
Iemand een idee wat het probleem kan zijn? Mogelijks een oplossing? Of werkt het niet op deze manier en moet ik het over een andere boeg gooien?
Ik ben bezig met het proberen om een (animated) image te verkleinen/vergroten volgens een variabele waarde. (Het gaat niet altijd om een animated image daarom de "ImageAnimator.CanAnimate") Voor zover google me kon vertellen moest ik eerst alle frames afzonderlijk bewerken. Dit heb ik ook gedaan in de onderstaande code. Nu krijg ik echter enkel de laatste frame te zien.
Nu vermoed ik dat dit komt doordat ik men "newImage" een bitmap toewijs en deze geen meerdere frames bevat en ik eigenlijk een image moet hebben met evenveel frames erin als de oorspronkelijke image. Of kan het zijn dat ik dit volledig mis zie? Indien dit het geval is zou ik mij een image moeten kunnen toewijzen die de juiste afmetingen heeft en de nodige aantal frames heeft.
Iemand een idee wat het probleem kan zijn? Mogelijks een oplossing? Of werkt het niet op deze manier en moet ik het over een andere boeg gooien?
C#:
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
| private Image GetReseizedPicture(int width, int height, Image currentImage) { if (ImageAnimator.CanAnimate(currentImage)) { Image newImage = new Bitmap(width, height, currentImage.PixelFormat); FrameDimension dimension = new FrameDimension(currentImage.FrameDimensionsList[0]); int frameCount = currentImage.GetFrameCount(dimension); for (int i = 0; i < frameCount; i++) { currentImage.SelectActiveFrame(dimension, i); using (Graphics g = Graphics.FromImage(newImage)) { g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle oRectangle = new Rectangle(0, 0, width, height); g.DrawImage(currentImage, oRectangle); } } return newImage; } else { Image newImage = new Bitmap(width, height, currentImage.PixelFormat); using (Graphics g = Graphics.FromImage(newImage)) { g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; Rectangle oRectangle = new Rectangle(0, 0, width, height); g.DrawImage(currentImage, oRectangle); } return newImage; } } |