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: 1550 | Anzahl registrierter User: 1841 | Besucher online: 44
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)

Bitmap in Graustufen wandeln


Autor: Jan Welker
Sprache: C#
Bewertung: 5
(1 Bewertung)
Anzahl der Aufrufe: 9015
  
Kick it on dotnet-kicks.de  

Beschreibung:

Diese Funktion wandelt ein Bitmap in Graustufen um.

Abgelegt unter: Bitmap, Graustufen, sw, schwarz, weiss, jpg.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System.Drawing; 

private Bitmap BildSW(Bitmap Bild)
{
	Color PixRGB;
	Color PixSW;
	int temp;
	for (int sp = 0; sp < Bild.Width; sp++)
	{
		for(int zei = 0; zei < Bild.Height; zei++)
		{
			PixRGB = Bild.GetPixel(sp,zei);
			temp = (PixRGB.R + PixRGB.G + PixRGB.B)/3;
			PixSW = Color.FromArgb(temp,temp,temp);
			Bild.SetPixel(sp,zei,PixSW);
		}
	}
	return Bild;
}
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.)

herbivore schrieb am:  09.12.2006 23:52:03

Das Auge nimmt die Farben der einzelnen Farbkanäle auch bei gleichen Beträgen unterschiedlich hell wahr. Deshalb berechnet man normalerweise einen gewichteten Durchschnitt. In der Bildbearbeitung GIMP wird folgende Formel verwendet: Y = 0.3R + 0.59G + 0.11B. Das Y nennt man auch die Leuchtkraft der Farbe.

Davon abgesehen arbeiten GetPixel und SetPixel sehr langsam. Hier könnte die Verwendung von Bitmap.LockBits zu einer erheblichen Beschleunigung führen.
M1C schrieb am:  13.09.2009 21:19:06

Ich hab mich mal an die Lockbits gesetzt^^
währe schön wenn du das nach oben einfügst. =)


private Bitmap BildSW(Bitmap bmp)
{
int numBytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[numBytes];
int tmpSW;

PixelFormat pxf = PixelFormat.Format24bppRgb;

Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
BitmapData bmpData = bmp.LockBits(rect, ImageLockMode.ReadWrite, pxf);

IntPtr ptr = bmpData.Scan0;

Marshal.Copy(ptr, rgbValues, 0, numBytes);

for(int counter = 0; counter < rgbValues.Length; counter+=3)
{
tmpSW = rgbValues[counter];
tmpSW += rgbValues[counter+1];
tmpSW += rgbValues[counter+2];

tmpSW /= 3;

rgbValues[counter] = rgbValues[counter+1] = rgbValues[counter+2] = Convert.ToByte(tmpSW);
}

Marshal.Copy(rgbValues, 0, ptr, numBytes);

bmp.UnlockBits(bmpData);

return bmp;
}


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