Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

xxendlessxx

Treue Seele

  • »xxendlessxx« ist der Autor dieses Themas

Beiträge: 230

Wohnort: Bad Schussenried

Beruf: Full Stack Developer

  • Private Nachricht senden

1

04.09.2010, 21:29

C#| Bilder proportional verkleinern

Guten Abend Leute,
ich habe gerade vor eine Funktion zu schreiben dir ein Bild so verkleinert das es in einen vorgegeben Bereich passt. Dabei soll das Bild nicht abgeschnitten werden. Das heißt wenn ich versuche ein 1024x768 bild in ein 500x1000 Bereich bringen will soll oben und unten ein schwarzer Streifen sein.

Umgekehrt sollte das auch gehen wenn ich versuche ein 500x1000 Bild in einen 1000x400 Breiech bringen will sollte Links und Rechts ein Streifen sein. Im Grunde soll das so sein wie bei Windows wenn man ein Wallpaper einstellt und als Eigenschaft Angepasst.

Momentan sieht es bei mir so aus. Aber ich hab keinen Durchblick mehr.

C-/C++-Quelltext

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
        public void SetPreviewImage(int MaxWidth, int MaxHeight)
        {
            Bitmap b = new Bitmap(MaxWidth, MaxHeight);
            Graphics g = Graphics.FromImage((Image)b);
            Image SourceImage = OriginalImage;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.FillRectangle(new SolidBrush(Color.Black), 0, 0, MaxWidth, MaxHeight);

            if (MaxWidth > MaxHeight)
            {
                if (SourceImage.Width > SourceImage.Height)
                {
                    float Ratio = SourceImage.Width / SourceImage.Height;
                    int NewHeight = MaxHeight;
                    int NewWidth = (int)(NewHeight/Ratio);
                    g.DrawImage(SourceImage, 0, 0, NewWidth, NewHeight);
                }
                else
                {
                    float Ratio = SourceImage.Height / SourceImage.Width;
                }
            }
            else
            {
                if (SourceImage.Width > SourceImage.Height)
                {
                    float Ratio = SourceImage.Width / SourceImage.Height;
                }
                else
                {
                    float Ratio = SourceImage.Height / SourceImage.Width;
                }
            }

            PreviewImage = (Image)b;
            g.Dispose();
        }

2

04.09.2010, 22:00

C-/C++-Quelltext

1
2
3
4
5
6
float f; // gesucht 
float source_ratio = source_width / source_height; 
float new_ratio = max_width / max_height; 
f = source_ratio > new_ratio ? max_width / source_width : max_height / source_height;  
new_height = source_height * f; 
new_width = source_width * f;


Gerade schnell überlegt, also keine Erfolgsgarantie ;)