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: 94
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)

Schwarzweiß Bilder mit einem Farbverlauf füllen


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

Beschreibung:

Mit dieser Klasse kann man vorzüglich schwarzweiß Bitmaps mit einem Farbverlauf von 2 Farben füllen.
Man kann z.B. schwarz zu rot umwandeln und weiß zu grün, wenn einzelne Farbwerte im Bitmap Grautöne haben, werden sie zu einer Mischung aus rot und grün umgerechnet.

Besonders nützlich ist die Klasse dann, wenn man eine Anwendungsoberfläche mit einem Farbschema bestehend aus 2 Farben hat und man diese Farben beliebig austauschen und somit unterschiedliche Skins ermöglichen möchte.

Beispiel zum Einsetzen der Klasse:

Bitmap bitmap = Bitmap.FromFile("Bild.bmp");

BitmapGradientColorReplacer bgcr = new BitmapGradientColorReplacer();

bgcr.ReplaceLowerColor = Color.FromArgb(255, 0, 0);
bgcr.ReplaceUpperColor = Color.FromArgb(0, 255, 0);

bgcr.Replace(bitmap);


Hier ein Screenshot aus dem Beispiel:
http://www.imgbox.de/users/public/images/D6gtecHwO9.JPG


Abgelegt unter: Farbverlauf, Bild, Farben, Skins, Farbschema.



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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/// <summary>
    /// Class to replace the colors of a black and white Bitmap with specified colors.
    /// </summary>
    public class BitmapGradientColorReplacer
    {
        /// <summary>
        /// Lower gradient <see cref="Color"/> to replace.
        /// </summary>
        private Color LowerColor { get; set; }

        /// <summary>
        /// Upper gradient <see cref="Color"/> to replace.
        /// </summary>
        private Color UpperColor { get; set; }

        /// <summary>
        /// Destination gradient <see cref="Color"/> to for the lower gradient color.
        /// </summary>
        public Color ReplaceLowerColor { get; set; }

        /// <summary>
        /// Destination gradient <see cref="Color"/> to for the upper gradient color.
        /// </summary>
        public Color ReplaceUpperColor { get; set; }

        public BitmapGradientColorReplacer()
        {
            // Später könnte man auch mit anderen Farben als Grundwerte arbeiten.
            // Allerdings muss dafür noch die GetPercentalColorValue angepasst werden.
            LowerColor = Color.FromArgb(0, 0, 0);
            UpperColor = Color.FromArgb(255, 255, 255);
        }

        /// <summary>
        /// Replaces all pixel colors in the <see cref="Bitmap"/> object with the specified gradient colors.
        /// </summary>
        /// <param name="bitmap">The <see cref="Bitmap"/> object for replace the colors.</param>
        /// <exception cref="NullReferenceException"></exception>
        /// <exception cref="ArgumentException"></exception>
        /// <exception cref="OverflowException"></exception>
        /// <exception cref="Exception"></exception>
        public void Replace(Bitmap bitmap)
        {
            if (ReplaceLowerColor == null)
            {
                throw new NullReferenceException("ReplaceLowerColor must not be null. Please set the destination gradient color for the lower color.");
            }
            if (ReplaceUpperColor == null)
            {
                throw new NullReferenceException("ReplaceUpperColor must not be null. Please set the destination gradient color for the upper color.");
            }
            if (LowerColor == null)
            {
                throw new NullReferenceException("LowerColor must not be null. Please set the lower gradient color to replace.");
            }
            if (UpperColor == null)
            {
                throw new NullReferenceException("UpperColor must not be null. Please set the upper gradient color to replace.");
            }

            if (bitmap == null)
            {
                // Man kann auch eine Exception werfen, oder einfach die Methode übergehen.
                // throw new ArgumentNullException("bitmap");
                return;
            }

            for (int x = 0; x < bitmap.Width; x++)
            {
                for (int y = 0; y < bitmap.Height; y++)
                {
                    Color pixelColor = bitmap.GetPixel(x, y);
                    bitmap.SetPixel(x, y, GetPercentalColorValue(pixelColor));
                }
            }
        }

        private Color GetPercentalColorValue(Color color)
        {
            // Von dem übergebenen Farbwert wird für jeden RGB Farbanteil der prozentuale Anteil
            // anhand der unteren gradient und oberen Gradientfarbe berechnet.
            // Dieser Prozentsatz für jeden einzelnen Anteil wird benötigt, um den Farbwert nach
            // der Zwischenfarbe den zu ersetzenden Gradientfarben zu übertragen.
            double rPercental = GetPercentage(color.R - UpperColor.R, LowerColor.R - UpperColor.R);
            double gPercental = GetPercentage(color.G - UpperColor.G, LowerColor.G - UpperColor.G);
            double bPercental = GetPercentage(color.B - UpperColor.B, LowerColor.B - UpperColor.B);

            // Es werden für jeden RGB Farbanteil anhand der entsprechenden Prozentsätze von
            // den Zielgradientfarben die neuen Prozentwerte für den Farbwert berechnet.
            int newRedValue = Math.Abs(Convert.ToInt32(ReplaceUpperColor.R + GetPercentageValue((ReplaceLowerColor.R - ReplaceUpperColor.R), rPercental)));
            int newGreenValue = Math.Abs(Convert.ToInt32(ReplaceUpperColor.G + GetPercentageValue((ReplaceLowerColor.G - ReplaceUpperColor.G), rPercental)));
            int newBlueValue = Math.Abs(Convert.ToInt32(ReplaceUpperColor.B + GetPercentageValue((ReplaceLowerColor.B - ReplaceUpperColor.B), rPercental)));

            return Color.FromArgb(color.A, newRedValue, newGreenValue, newBlueValue);
        }

        private double GetPercentage(double percentageValue, double baseValue)
        {
            return percentageValue * 100 / baseValue;
        }

        private double GetPercentageValue(double baseValue, double percentage)
        {
            return baseValue * Math.Abs(percentage) / 100;
        }
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] Einen Farbverlauf - the easy way
[VB.NET] Farbverlauf
[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#] Größe eines Bildes mit mit gleichem Seitenverhältniss ä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#] Bild rotieren mit C#
[C#] Alle verfügbaren Farben mittels WPF ausgeben

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