GrayedBitmap



  • Ich habe in mein Programm die Funktion GetGrayedBitmap aus dem Forum von www.winapi.de eingebaut.

    Diese Funktion arbeitet (insbesondere bei größeren Bitmaps) unerträglich langsam? Gibt es da keine schnellere Methode?

    Meine Anfrage in das www.winapi.de-Forum wurde dort so beantwortet:

    "Du könntest das Bitmap z.B. in WM_CREATE einmal wandeln und dann irgendwo, für die Verwendung in WM_PAINT, speichern (und natürlich in WM_DESTROY wieder löschen)."

    Leider funktioniert der Zugang trotz Registrierung zu diesem Forum nicht mehr, deshalb frage ich mal hier:

    Wie kann die Umwandlung einer Farbbitmap in eine Graustufenbitmap möglichst schnell erfolgen? Bei meinen Farbbildern handelt es sich um 2048 x 1536 Pixel große Labordatenbilder, die aus einem Archiv gelesen und nach einer Graustufenwandlung scaliert auf älteren Notebooks mit passivem Display ausgegeben werden müssen.



  • www.s_c_h_m_i_d_t_d_v.de.vu

    da gibt's ne dll für solche sachen, die IMHO auch schnell ist.
    du musst nur die unterstriche wegmachen aus der URL



  • warum dennn so geheimnisvoll und umständlich?

    google doch einfach nach wingdiex.



  • weil die url hier illegal ist 😃



  • hääää??????????

    was soll den an der seite/url illegal sein?



  • URL-Test: http://www.*********.de.vu

    Es gab irgendwelche Streitigkeiten zwischen dem Betreiber dieses Forum und dem Betreiber dieser Seite und somit wurde die URL hier zensiert!



  • sonen schwachsinn habe ich ja noch nie gehört!!!!!!!!!!!!!



  • ist aber so :p



  • @<WinUser>
    Vielleicht hilft dir ja eine kleine Funktion weiter, die ich mal gemacht habe, um eine Farbe "einzugrauen". Hier:

    VOID RGBToGray(BYTE* color)
    {
       float fRed_Part   = 0.299 * (float)color[2];
       float fGreen_Part = 0.587 * (float)color[1];
       float fBlue_Part  = 0.114 * (float)color[0];
    
       BYTE bColor  = (BYTE)(fRed_Part + fGreen_Part + fBlue_Part);
       LONG* lColor = (LONG*)color;
       *lColor = (bColor << 16) | (bColor << 8) | bColor;
    }
    

    Klappt ganz gut. Um ein Bitmap damit einzugrauen, schau dir doch mal die Funktionen Get/SetDIBits() an. Mit denen macht man das.



  • Vielen Dank für euren Tipp, das hat mir sehr geholfen! Die DLL erledigt mein Problem auf einem 233 MHz-Notebook fast in Echtzeit und bringt zusätzlich noch Funktionen mit, um meine Bilder in Photoshopqualität scalieren :-))



  • Ich habe in mein Programm die Funktion GetGrayedBitmap aus dem Forum von www.winapi.de eingebaut.

    Nein, nicht ".de" sondern ".net" 😃



  • Ich bin schon auf der richtigen Seite gewesen und ich hatte die Funktion GetGrayedBitmap von dieser Seite auch erfolgreich in mein Programm eingebunden.

    Weil diese Funktion aber zu zeitaufwändig und langsam war, hatte ich mich in dem Forum registriert und nachgefragt. Nur funktionierte mein Zugang, aus welchen Gründen auch immer, nach meinem ersten Posting nicht mehr.

    Egal, probiere die WinGdiEx einmal aus und poste deine Meinung zum Laufzeitverhalten.

    Trotzdem vielen Dank für deine Mühe.



  • Wenns noch schneller gehen soll, empfehle ich Integer-Operationen!

    z.B.

    VOID RGBToGray(BYTE* color)
    {
      color[2] = color[1] = *color = (299*color[2]+587*color[1]+114*color[0])/1000;
    }
    

Anmelden zum Antworten