JPG Bild - Schwarz/Weiß - Farbwerte auslesen

Terminator2

Erfahrenes Mitglied
Hallo,

Habe schon was im Forum gesucht und gegoogelt. Aber noch nichts richtiges gefunden.
Und zwar bin ich auf der Suche nach einer Funktion oder Methode etc. mit der ich ein Bild aus einer Datei laden kann und dieses dann so zerlegen kann, sodass ich Farbwerte oder Graustufen auslesen kann. Das ganze soll dann in Form von einer Tabelle, später Array angezeigt werden.

Sinn der Sache ist, dass ich mir überlegt habe, anhand eines Bildes Punkte erkennen zu können. Das Bild kann oder soll am besten in Schwarz/Weiß umgewandelt werden. Dann kann ich ja anhand der Zahlen in dem Array erkennen, wo dunkle Flächen vorhanden sind. Falls das geht, ist der nächste Schritt zu erkennen, wo eine geschlossene Fläche vorliegt. Man kann ja nicht davon ausgehen, dass der Punkt nur einen Pixel groß ist...

Ich hoffe, dass es nicht zu viel Arbeit ist, so etwas zu verwirklichen. Hat da jemand schon Erfahrung?


Viele Grüße!
 

Alexander Schuc

crazy-weasel
Die werden eh gleich beim ersten Artikel weiterverlinkt. *fg*

Na gut, deswegen schreib ich nicht: Du darfst Alex (oder wiesel - hier darf das w auch groß sein - *fg*) sagen.. ;)
 

Terminator2

Erfahrenes Mitglied
Hey,

Nicht schlecht... Sehr beeindruckend, sieht professionell aus. Hätte nicht gedacht, dass man sowas mit Source Code findet...

Also erstmal Vielen Dank. Ich werde mich mal mit der Zeit was reinarbeiten (und in VB.NET konvertieren :p )

PS: Gibt es auch solche Projekte, die Verzerrungen verhindern? Ich habe mal drüber nachgedacht. Wenn ich mit einer Kamera eine Nahaufnahme mache, dann ist das Bild immer an den Seiten abgerundet, da ja die Punkte weiter vom Objektiv entfernt sind, als die im Mittelpunkt. Habe schon in mehreren Programmen Entzerrungsmöglichkeiten gesehen. Gibt es sowas auch fertig? In dem codeproject ist ja ein Beispiel in dem das Bild verzerrt wird. Dann kann man das ja auch entzerren ;) Ich würde eine manuelle Entzerrung vorziehen, es sei denn es gibt eine automatische, die wirklich gut funktioniert...

Viele Grüße, David ;)
 

Terminator2

Erfahrenes Mitglied
Hey,

Also ich habe mich mal ein wenig eingearbeitet. Also nur in dem Programm, nicht im Source. Also ich kann momentan die Part1 bis Part6 Programme am besten gebrauchen. Daher wollte ich mir mal das Part6 (Mit allen Funktionen) in VB.NET 8.0 konvertieren. Also mein Visual Studio kann alle Sprachen, ich nicht. Das Problem ist aber eher, dass die Projekte mit Version 7.1 erstellt wurden und bei mir nicht ganz funktionieren. Ich poste mal die Fehler, vielleicht kann jemand damit etwas anfangen und die Fehler beheben...

Hier Fehler 1:

"CSharpFilters.Form1.Resize" blendet den vererbten Member "System.Windows.Forms.Control.Resize" aus. Verwenden Sie das new-Schlüsselwort, wenn das Ausblenden vorgesehen war.

Code:
private System.Windows.Forms.MenuItem Resize;

Und der 2. Fehler:

Fehler 2 Der Aufruf unterscheidet nicht eindeutig zwischen folgenden Methoden und Eigenschaften: "System.Math.Floor(decimal)" und "System.Math.Floor(double)"

Code:
public static bool RandomJitter(Bitmap b, short nDegree)
		{
			Point [,] ptRandJitter = new Point[b.Width,b.Height]; 

			int nWidth = b.Width;
			int nHeight = b.Height;

			int newX, newY;

			short nHalf = (short)Math.Floor(nDegree/2);
			Random rnd = new Random();

			for (int x = 0; x < nWidth; ++x)
				for (int y = 0; y < nHeight; ++y)
				{
					newX = rnd.Next(nDegree) - nHalf;

					if (x + newX > 0 && x + newX < nWidth)
						ptRandJitter[x, y].X = newX;
					else
						ptRandJitter[x, y].X = 0;

					newY = rnd.Next(nDegree) - nHalf;

					if (y + newY > 0 && y + newY < nWidth)
						ptRandJitter[x, y].Y = newY;
					else
						ptRandJitter[x, y].Y = 0;
				}
				
			OffsetFilter(b, ptRandJitter);		

			return true;
		}


So, wäre sehr gut, wenn jemand die Fehler beheben könnte.

PS: Kann man die C# Projekte nicht direkt komplett in VB konvertieren? Die Code Konverter sind immer ein wenig aufwendig und hinterher funktioniert es dann doch nicht. Man muss ja auch das komplette Layout übertragen. Das muss doch einfacher gehen, oder? Gibts da keine Möglichkeit von Visual Studio aus?

Danke! :)
 
Zuletzt bearbeitet: