RGB Werte aus Bild auslesen

Stiff-Master

Grünschnabel
Hallo

ich möchte mit dem Borland Builder ein Bild laden, das dann in der Form angezeigt wird.
Dann möchte ich wenn ich auf einen Button klicke, das aus allen Pixeln des Bildes die RGB Werte rausgelesen werden und die sollen dann in einer Txt Datei gespeichert werden.

Kann mir da jemand helfen der weis wie das geht?

Thx Steffen
 
Hi,
Ich wuerde das so machen:
In der Form erstellst du ein TImage dass das Bild auch anzeigt. Das speichern in die Datei machst du per TStringList::SaveToFile.
Die Pixel holst du in Borland per Canvas::pixels[x][y] raus. Dabei besteht ein Wert aus den drei farben direkt, also 0x00bbggrr.
um Rot dann da raus zu kriegen schreib einfach: dwPixel&0xFF
um Blau rauszukriegen: (dwPixel&0xFF00)/0x100 // Achtung Krammer ist wichtig

Siehe anhang... ja ich hatte gerade nix anderes zu tuhn. ;)
Code:
TStringList *StrList;
DWORD rgb;
StrList = new TStringList();

// Das Bild laden
Image1->Picture->LoadFromFile( "X:\\Pfad\\Name.bmp" );

// TStringList mit Daten Fuellen
for(int y=0;y<Image1->Picture->Height;y++)
     for(int x=0;x<Image1->Picture->Width;x++)
     {
        rgb = Image1->Picture->Bitmap->Canvas->Pixels[x][y];
        StrList->Add(IntToStr(rgb&0xFF)+" "+
                           IntToStr((rgb&0xFF00)/0x100)+" "+
                           IntToStr((rgb&0xFF0000))/0x10000);
     }
StrList->SaveToFile("Y:\\nocheinPfad\\nocheinName.txt");
viel Spass
 

Anhänge

  • bild-txt.zip
    13,6 KB · Aufrufe: 108
gut dass noch kein häkchen da is *g*
ich hätt nämlich auch mal ne Frage zu Farbwerten in Images:
1.allgemein: wie definiere ich eine (beliebige) Farbe (in html wärs ja #FFFFFF, geht aber in C++ irgendwie nicht), die ich dann zB mit Canvas->Pixels... irgendwo hinmalen kann
2. wie kann ich eine Farbe auslesen und verändern (z.B. dass es erst hellgrau ist und ich dann quasi ein rotes leuchten drauf"zauber")?
 
mhhh muss die RGB werte auch aus einer Bmp lesen!! Allerdings mach ich das mit Visual Studio und mir fehlt halt nur noch das auslesen der RGB werte und das schreiben der HSV werte
Code:
// Farbraum.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>


using namespace std;


int main()
{
	int x, y;
	double R, G, B, Max, Min, H, S, V, r, g, b;
	unsigned char* pData;
	
    // read the image
	bool bSuccess = ReadBmp( "C:/P1000825.bmp", x, y, pData );
	if ( bSuccess == false )
	{
		cout << "*Error loading image!*" << endl;
		return 1;
	}
	

	R = r / 256.0; 
	G = g / 256.0;
	B = b / 256.0;

	if(R > G && R > B)Max = R;
	if(G > R && G > B)Max = G;
	if(B > G && B > R)Max = B;

	if(R < G && R < B)Min = R;
	if(G < R && G < B)Min = G;
	if(B < G && B < R)Min = B;

	if(R = Max)H = 0 + (G - B) / (Max - Min);
	if(G = Max)H = 2 + (B - R) / (Max - Min); 
	if(B = Max)H = 4 + (R - G) / (Max - Min);

	if(H < 0) H = H + 360;

	S = (Max- Min) / Max;
	V = Max;

	// write the image
	if ( WriteBmp( "output.bmp", x, y, pData ) == false )
	{
		cout << "*Error writing image!*" << endl;
		return 1;
	}

	fgetchar ();

	return 0;
}

Kann mir da bitte jemand helfen?
 
Alle Werte aus Bild auslesen

Es gibt neben den RGB doch noch andere Farbwerte wie:
Farbtiefe
Saettigung
Helligkeit
und meine Frage lautet: Wie kann man diese auslesen, denn das mit den RGB hab ich verstanden, aber Frage mich nun wie ich an die anderen Werte komme ?

Danke im Voraus
 
Zurück