Bitmappixel auslesen



  • Ähm hallo 🙂

    Ich möchte nen Bitmap (schwarz-weiß 8bit) laden und dann für jeden Pixel den Wert auslesen. Also das sollte bei bei 8bit 0-255 sein 😮

    Meine Hoffnung ist jetzt, dass das mit Hilfe des tollen 😃 BCB kein Problem ist.
    Trotzdem hab ich keine Ahnung wie ich das jetzt anpacken soll. 🙄

    Wäre nett wenn mir jemand mal sagt, mit Hilfe welcher Funktionen und so ich das anstellen kann
    Dankeschön 🙂



  • TCanvas::Pixels oder TBitmap::Scanline



  • Und wie soll ich das jetzt benutzen 😕



  • Hast dir für den Einstieg ja was vorgenommen, @Luftgeist. Aber warum nicht? In den Threads findest du zich Beispiele zum Thema. Da kann man schon reinfinden.

    Vielleicht als kleinen Mutmacher mal ein simples Beispiel zur Nutzung im OnMouseMove:

    RefColor = Image->Canvas->Pixels[X][Y];
        RefColor = ColorToRGB(RefColor);
        int r = GetRValue(RefColor); //Rotanteil
        int g = GetGValue(RefColor); //Grünanteil
        int b = GetBValue(RefColor); //Blauanteil
        String sr = IntToStr(r), sg = IntToStr(g), sb = IntToStr(b),
                RGBColor = " RGB: " + sr + " " + sg + " " + sb;
        Image->Hint = RGBColor;
    

    Genieß erst mal den Erfolg. Dann solltest du aber mit der Maus auf die Bezeichner gehen und mit F1 die Klassen studieren. Sonst war die Übung für die Katz. (Der Hint wird bei mir in der Statusleiste ausgegeben. Kannst auch was ganz anderes in der Zeile machen).

    Wenn du zB. alles in einer Liste erfassen willst, mußt du eine Schleife abarbeiten.



  • Sorry, vergessen:

    TColor RefColor;



  • Dnkeschön, das hilft schon mal. Ich hab das Bild jetzt mal so geladen:

    if (OpenDialog1->Execute()) Image1->Picture->LoadFromFile(OpenDialog1->FileName);
    

    ist das ok so 😕

    Das mit dem RGB und Farben ist ja auch ne tolle Sache 😉 . Aber ich will ja nur schwarz-weiß (grayscale). Gibts dafür denn nicht irgendwas spezielles?

    Ach ja, wenn wir schond abei sind kann ich ja gleich nen Schritt weitergehen. Muss ich jetzt zum Dateischreiben so nen alten befehl wie fwrite nehmen oder hat der Builder auch irgend ne tolle Funktion, die einem so binärschreiben vereinfacht? 🙄



  • Ja klar hast du den OpenDialog richtig bedient. Hilfe sagt "ja" und es funktioniert. 🙂

    Alles, was du erst mal brauchst, sollte im Beispiel stecken. Du hast nicht verraten, in welcher Form du die Ausgabe brauchst. Also bekommst du jetzt noch ein ehernes Betriebsgeheimnis :p anvertraut:

    ShowMessage()

    Damit läßt sich ganz unorthodox der Inhalt einer Variable ermitteln - obwohl der Debugger das allemal kann. Nach der ersten/zweiten Zeile oder am Schluß aufgerufen findet er vielleicht die passende Ausgabe?

    Wenn du die Standardfarben als Ausgabe brauchst, die kannst du aus dem Beispiel konstruieren (Methoden von AnsiString) oder schnapp dir die FAQ/Suchfunction. Es gibt mindestens ein schönes Beispiel, das zum jetzigen Code prima dazu paßt.



  • Ich will doch nur nen graues Bild untersuchen, ist das denn so schwer, dass mir keiner helfen kann 😞



  • @Luftgeist

    Dann addiere doch die drei Farbwerte pro Pixel zusammen.

    Oder nimm Bitmap->Scanline. Schau Dir ma das Beispiel in der Hilfe an!
    Mit nem (Byte*)- Pointer haste bei 8-Bit Bitmap direkt den Wert!



  • Das mit ShowMessage() ahb ich noch gar nicht gewusst. ich schreib so Zeug normal immer in nen Memo, da sieht man auch genug 😃

    Habs jetzt endlich mit dem Scnline hinbekommen. Das Beispiel sah nur so abschrecken aus (Pointer etc) 😮 Hätte nicht gedacht, dass es so einfach ist 🙂

    Jetzt muss ich dne kram nur noch speichern, das sollte aber kein Problem sein, hoffe ich 😉



  • Aso, danke für eure Hilfe 🙂



  • Null Problemo, @Luftgeist. Wo @DerAltenburger hinlangt, wird mit wenigen prezisen Anweisungen Kleinholz gemacht. 😉



  • Hi Omega-X

    Uebertreib nicht so!

    Manchmal muessen auch 'n paar grosse Kloetze uebrigbleiben - z.B. fuer'n Kamin! :p



  • Glück auf @DerAltenburger!

    Ist jemand, der mitten im totalsten Hochsommer an Kaminfeuer denkt, ein Optimist oder ein Pessimist?

    :p



  • Pragmatiker!



  • Axo


Anmelden zum Antworten