Sprache: C#
Mit diesen "paar" Zeilen Code kann man – leider soweit ich weiß auf die einzige Art – Bitmaps (System.Drawing.Bitmap) Prozentual verdunkeln.
>>Da dies eine Pixeloperation ist und das ganze Bild durchlaufen werden muss, kann es bei großen Bildern länger dauern. đ <<
[Edit] Man kann natürlich auch Bilder aufhellen indem man z.B. 150% angibt. đ
private Bitmap DimmImage(string Filename, int Percent)
{
Bitmap b = new Bitmap(Filename);
for (int i = 0; i < b.Width; i++)
{
for (int k = 0; k < b.Height; k++)
{
try
{
int percent = percent / 100;
int newR = Convert.ToInt32(b.GetPixel(i, k).R * percent);
int newG = Convert.ToInt32(b.GetPixel(i, k).G * percent);
int newB = Convert.ToInt32(b.GetPixel(i, k).B * percent);
Color c = Color.FromArgb(newR, newG, newB);
b.SetPixel(i, k, c);
}
catch
{
}
}
}
return b;
}
private Bitmap DimmImage(string Filename, int Percent)
{
Bitmap b = new Bitmap(Filename);
for (int i = 0; i < b.Width; i++)
{
for (int k = 0; k < b.Height; k++)
{
try
{
int percent = percent / 100;
int newR = Convert.ToInt32(b.GetPixel(i, k).R * percent);
int newG = Convert.ToInt32(b.GetPixel(i, k).G * percent);
int newB = Convert.ToInt32(b.GetPixel(i, k).B * percent);
Color c = Color.FromArgb(newR, newG, newB);
b.SetPixel(i, k, c);
}
catch
{
}
}
}
return b;
}
Alte URL:
/snippet/bilder-bzw-bitmaps-prozentual-verdunkeln/1670
Abgesehen davon, das der Code sowieso Fehler enthÀlt, (versuche mal 50% helligkeit anzugeben und sieh dir die Farben an) geht eine ColorMatrix um ein Vielfaches schneller. Hier ein kurzes Beispiel:
[code]
private void DrawImage(Image img, PaintEventArgs e, Point p, float r)
{
// Lokale Daten
int iWidth = ClientSize.Width / 3;
int iHeight = ClientSize.Height / 3;
Rectangle rectTarget = new Rectangle(
0, 0,
iWidth, iHeight);
float[][] cm = {
new float[]{1.0f, 0.0f, 0.0f, 0.0f, 0.0f},
new float[]{0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
new float[]{0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
new float[]{0.0f, 0.0f, 0.0f, 1.0f, 0.0f},
new float[]{r, r, r, r, 1.0f}};
ColorMatrix colorMatrix = new ColorMatrix(cm);
ImageAttributes imgAttribute = new ImageAttributes();
imgAttribute.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(img, rectTarget,
p.X,p.Y, img.Width, img.Height,
GraphicsUnit.Pixel, imgAttribute);
}
[/code]
Diese Methode benötigt Werte zwischen -1 und 1. Also wenn man es korrekt nimmt auch Prozenntwerte.
Muss ich zustimmen, GetPixel ist immer die langsamste Lösung.
Wo fĂŒr stehen die Parameter und wie kann ich das ganze einfach einer Draswing.Bitmap oder .Image zuweisen?
Hallo,
das wichtigste an dem Code ist die ColorMatrix. Diese kann ein Bild (Genauer die Farben der Pixel) auf bestimmte Art und Weise verÀndern. Im MSDN Artikel steht ein kleines Beipiel dazu:
http://msdn.microsoft.com/de-de/library/system.drawing.imaging.colormatrix.aspx
Hier noch eine Seite mit einigen Beipielen:
http://www.geekpedia.com/tutorial202_Using-the-ColorMatrix-in-Csharp.html
Dort wird das Bild am Ende ĂŒber einen kleinen Trick einer PictureBox zugewiesen.
Danke..