Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1551 | Anzahl registrierter User: 1841 | Besucher online: 341
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

Größe eines Bildes mit mit gleichem Seitenverhältniss ändern


Autor: Carsten Schlegel
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 12078
  
Kick it on dotnet-kicks.de  

Beschreibung:

Ändert die Größe eines Bildes wobei das Seitenverhältnis eingehalten wird.
Beispiel : Bild mit 30 x 60 Pixel soll auf 90 x 90 geändert werden.

Absolut = true : das Bild hat 90 x 90 Pixel, wobei das Bild nur um Faktor 1.5 vergrößert wurde (45 x 90), der Rest wird mit einer anzugebenden Farbe aufgefüllt.

Absolut = false : das Bild hat danach 45 x 90 Pixel. Mehr war nicht möglich ohne das entweder das Seitenverhältnis verändert oder eine der angebenen Maße (Width 90 bzw. Height 90) überschritten wird.

Die Funktion setzt ebenfalls auch die Hintergrundfarbe für transparente Bilder (PNG).

Mit einem Maximalen Faktor kann eine zu starke Vergrößerung verhindert werden.

Soll das Bild z.B. 900 x 900 Pixel groß werden, so sähe es nicht besonders gut aus (bei Ursprungsbild 30 x 60). Es würde der Faktor 15 verwendet werden. Mit der Angabe eines Max Faktors kann dieser z.B. auf 4 minimiert werden. Das Bild hat dann 120 x 240 Pixel (oder 240 x 240 wenn es Absolut sein soll).

Aufrufbeispiel:

pictureBox1.Image = ResizePic(img, 300, 300, true, Color.Green, -1, -1);


Abgelegt unter: Bild, Image, Bitmap, Size, Größe, Ändern, Resize, Vergrößern, Verkleinern, Backcolor, Hintergrundfarbe, Hintergrund, Color, Farbe, Absolut, Relativ.



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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System.Drawing;

/// <summary>
/// Ändert die Größe eines Bildes und setzt eine Hintergrundfarbe.
/// </summary>
/// <param name="Source">Originalbild als Image</param>
/// <param name="Width">Neue Breite in Pixel</param>
/// <param name="Height">Neue Höhe in Pixel</param>
/// <param name="Absolut">Wenn true wird ein Image mit exakt den angegebenen Maßen erstellt. Das Bild wird mittig plaziert und mit der angegebenen Farbe gefüllt. Seitenverhältnisse des Bildes selbst bleiben erhalten. Wenn False dann wird entsprechend dem kleinem Faktor das neue Bild berechnet (neues Bild hat dann aber ggfs. NICHT die angegebenen Maße!)</param>
/// <param name="Fill">Füllfarbe für Hintergrund (vorallem wichtig bei Absolut = true oder Transparenten Bildern (PNG)</param>
/// <param name="MaxFactorX">Maximaler Vergrößerungsfaktor X-Achse. Wenn aus Width = 10 z.B. 1000 werden soll, so kann der Wert 2 ein maximales verdoppeln ermöglichen. Das Bild hat dann Width = 20. -1 bedeutet kein Mindestfaktor</param>
/// <param name="MaxFactorY">Maximaler Vergrößerungsfaktor Y-Achse. Wenn aus Height = 10 z.B. 1000 werden soll, so kann der Wert 2 ein maximales verdoppeln ermöglichen. Das Bild hat dann Height = 20. -1 bedeutet kein Mindestfaktor</param>
/// <returns>Bitmap / Image</returns>
private static Image ResizePic(Image Source, int Width, int Height, bool Absolut, Color Fill, double MaxFactorX, double MaxFactorY)
{
    if (Source != null)
    {
        // Faktoren für X und Y Achse berechnen
        double dblFaktorX = (double)Width / (double)Source.Width;
        if (dblFaktorX > MaxFactorX & MaxFactorX > -1)
        {
            Width = (int)((double)Source.Width * MaxFactorX);
            dblFaktorX = MaxFactorX;
        }

        double dblFaxtorY = (double)Height / (double)Source.Height;
        if (dblFaxtorY > MaxFactorY & MaxFactorY > -1)
        {
            Height = (int)((double)Source.Height * MaxFactorY);
            dblFaxtorY = MaxFactorY;
        }

        // kleinern Faktor benutzen
        double dblFaktorUse;
        if (dblFaktorX < dblFaxtorY)
            dblFaktorUse = dblFaktorX;
        else
            dblFaktorUse = dblFaxtorY;

        int intNewX = (int)((double)Source.Width * dblFaktorUse);
        int intNewY = (int)((double)Source.Height * dblFaktorUse);

        Bitmap objNewImage;
        int intPosX, intPosY;

        if (Absolut)
        {
            objNewImage = new Bitmap(Width, Height);
            intPosX = (Width - intNewX) / 2;
            intPosY = (Height - intNewY) / 2;
        }
        else
        {
            objNewImage = new Bitmap(intNewX, intNewY);
            intPosX = 0;
            intPosY = 0;
        }

        using (Graphics objGfx = Graphics.FromImage(objNewImage))
        {
            objGfx.FillRectangle(new SolidBrush(Fill), 0, 0, objNewImage.Width, objNewImage.Height);
            objGfx.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            objGfx.DrawImage(Source, new Rectangle(intPosX, intPosY, intNewX, intNewY));
        }
        return objNewImage;
    }
    else
        return null;
}

Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



Diese Snippets könnten für Sie interessant sein:
[VB.NET] Bildgröße verändern (Verhältnis)
[VB.NET] Bildgröße verändern (Prozentual)
[VB.NET] Bildgröße verändern (Manuell)
[VB.NET] Neues Größenverhältnis eines Bilds berechnen
[VB.NET] JPEG Bild komprimieren
[VB.NET] Bild Transparent machen mit ColorMatrix
[VB.NET] Farben eines Bilds umkehren
[VB.NET] Bild in Graustufen umwandeln
[C#] GDI+ und das Paint Event
[C#] Bild anzeigen - Datei schließen
[VB.NET] Text auf Bild zeichnen
[C#] Größe verändern von Bildern
[ASP.net] Datei nach Bildupload prüfen
[C#] GetEuclidicDistance
[VB.NET] Bitmap Differenz Analyse
[VB.NET] Verschlüsslung von Dateien mit Vernam
[C#] Bild drehen (nach Winkelangabe)
[C#] Bildgröße im Verhältnis verändern (Interpoliert)
[C#] Bild von einem Control oder Panel
[VB.NET] Bildausschnitt auslesen
[VB.NET] Bildgröße im Verhältnis verändern (Interpoliert)
[VB.NET] Bildgröße prozentual verändern (Interpoliert)
[VB.NET] Bildgröße in beiden Dimensionen verändern (Interpoliert)
[VB.NET] Alle Pixel einer bestimmten Farbe neu einfärben
[C#] Bild steht auf reflektierendem Grund
[C#] Bilder verkleinern, beschneiden und beides gleichzeitig
[C#] Bild splitten
[VB.NET] Bytearray to Image / Image to Bytearray
[C#] Text2Bitmap (String in Bild umwandeln)
[C#] Hintergrundfarbe Transparenter Bilder (z.B. PNG) ändern
[C#] externes Programm aufrufen (andere Version) mit Parameter
[C#] Herausfinden welches Programm ein bestimmtes Dokument öffnet
[C#] Bitmap schneller in Graustufen wandeln
[C#] Bilder aus *.resx Ressourcen Dateien in WPF verwenden
[VB.NET] Bild mit allen farben (True Color 16 Millionen Farben)
[C#] Schwarzweiß Bilder mit einem Farbverlauf füllen
[C#] Bild rotieren mit C#
[VB.NET] Invert Colors from Image
[VB.NET] Resize image to fit in picturebox
[C#] Bild beim Zeichnen invertieren
[C#] Square Thumbnail generieren
[C#] Change PixelFormat
[VB.NET] Durschnittsfarbe eines Bildes ermitteln
[C#] Image in IPictureDisp umwandeln
[C#] Image zu Base64 konvertieren und zurück
[C#] Image in string wandeln und zurück
[C#] base64 codierten String in eine Bitmap umwandeln
[C#] Bitmap in base64 codierten String wandeln
[C#] Image aus URL laden
[C#] WPF: Image aus dem Web in Image-Element anzeigen
[C#] ISO-Abbild von einer CD/DVD erstellen
[VB.NET] Let your image glow - Bild glühen lassen
[C#] old Windows Forms Image to new WPF Image
[C#] SystemIconsImageListWrapper
[C#] Floyd Steinberg Dithering
[C#] Bitmap in Graustufen wandeln
[VB.NET] Bitmap Header auslesen (File & Info)
[C#] Bitmap in Icon konvertieren
[C#] ExtractAssociatedIcon
[C#] Custom Cursor
[C#] Kapazität mit Einheit darstellen
[C#] Size of object in bytes
[C#] Fixes Form in Höhe und Breite verdoppeln, Inhalt skalieren
[C#] MakeNiceSize()
[C#] Get Directory Size Recursively
[C#] Größe einer rahmenlosen Form ändern
[VB.NET] Größe eines Strings berechnen
[ASP.net] iFrame Grösse dem Inhalt anpassen
[C#] Größe einer SQL-Server Datenbank ermitteln
[VB.NET] Größe einer SQL-Server Datenbank ermitteln
[VB.NET] ControlResize wie in der IDE auch zur Laufzeit
[VB.NET] Ordnergröße ermitteln
[C#] Create Nice File Size in C#
[C#] Größe eines Strings berechnen
[C#] Byte Größenangaben als String formatieren (KB, MB, GB, ...)
[C#] Verzeichnis überwachen mit dem FileSystemWatcher
[C#] Form als Tray Icon ablegen (Notifyicon)
[VB.NET] Control Resize wie in der IDE auch zur Laufzeit - Extended
[VB.NET] Resize,Crop und beides gleichzeitig von Images
[C#] Kleine Array-Erweiterung
[C#] Bilder proportional Skalieren
[C#] Transparenter Hintergrund beim Steuerelement
[C#] Hexstring in System.Drawing.Color umwandeln
[VB.NET] Austauschbares Farblayout-System
[C#] Type Color serialisieren und deserialisieren
[C#] Zufallsfarbe erzeugen
[VB.NET] Die Farbe eines Pixels in einer Windows Form abfragen
[C#] Die Farbe eines Pixels in einer Windows Form abfragen
[C#] Alle verfügbaren Farben mittels WPF ausgeben
[C#] Farbe per Prozentwert ändern (grün bis rot)
[C#] ColorMap für Falschfarben
[C#] Color Extension-Methods
[C#] Typen mit dem XmlSerializer (de-)serialisieren

schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.