Graustufen
-
Ich habe noch ne frage ich habe im internet einen code gefunden welcher ein frab bild graustuuft, mein problem ist jetzt, da ich mich ja nicht wirklich in c++ auskenne verstehe ich nicht wirklich, was passiert.
Ich möchte einfach nur das programm starten, einen parameter mit dem bild pfad übergeben, das habe ich bereits, jetzt müsste ich nur noch wissen, wie ich den pfad an diese funtion übergeb kann. danke für eure hilfe
oder hat jemand eine einfachere methode?
mfg seramis
//----------------------------------------------------------------- // Funktion BitmapToGreyScale() konvertiert ein farbiges // Bild im übegebenen TBitmap-Objekt in ein Graustufen-Bitmap //----------------------------------------------------------------- void BitmapToGreyScale(Graphics::TBitmap *pBitmap) { LOGPALETTE* plLogPal = NULL; int ilPaletteSize = 0; // Grösse des Buffers für die LOGPALETTE-Struktur pBitmap->PixelFormat = pf8bit; try { // Speicherbedarf für die Palette berechnen und Speicher reservieren: ilPaletteSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 255); plLogPal = (LOGPALETTE*) malloc(ilPaletteSize); if(plLogPal != NULL) { // Palette initialisieren: plLogPal->palVersion = 0x300; plLogPal->palNumEntries = 256; // Farben in der Palette mit Graustufen-Werten initialisieren: for (int ilColorIndex = 0; ilColorIndex <= 255; ilColorIndex++) { plLogPal->palPalEntry[ilColorIndex].peRed = ilColorIndex; plLogPal->palPalEntry[ilColorIndex].peGreen = ilColorIndex; plLogPal->palPalEntry[ilColorIndex].peBlue = ilColorIndex; plLogPal->palPalEntry[ilColorIndex].peFlags = PC_NOCOLLAPSE; } // Palette erzeugen und zuweisen: HPALETTE hLogPal = CreatePalette(plLogPal); if (hLogPal) pBitmap->Palette = hLogPal; // Speicher wieder freigeben: free(plLogPal); plLogPal = NULL; } } catch ( ... ) { ; } }
/edit: code tags repariert
-
So einfach, wie Du Dir das denkst, ist das leider nicht, denn dieser Funktion kannst Du gar keine Pfadangabe übergeben. Sie erwartet ein TBitmap als Argument (bzw. dessen Adresse, ist ja ein Zeiger). Demnach geht die Funktion davon aus, dass bereits ein Bild geladen wurde, wobei der Lade-Vorgang irgendwo anders erfolgt ist.
Davon abgesehen wärst Du vermutlich damit im Borland-Foum besser aufgehoben, denn TBitmap wird wohl irgendeine Klasse von Borland sein. (das ist demnach kein Standard C++!)
Noch ein Tipp: Du sagst selber, dass Du den Code nicht verstehst. Aber einfach mit Copy&Paste Codes einfügen, wird dich in Bezug auf Deine Programmierkenntnisse nicht weiterbringen.
-
also dann ab ins Borlandforum, da sagt dir sicher wer, die du ein passendes TBitmap erzeugen kannst.
-
Dieser Thread wurde von Moderator/in davie aus dem Forum C++ in das Forum Borland C++ Builder (VCL/CLX) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
erzeuge ein Image, ungefähr so:
TImage *img = new TImage();
dann lade die Datei, laden:
img->Picture->LoadFromFile(ParamStr(1));
und rufe die funktion dann so auf:
BitmapToGreyScale(img);
jetzt einfach wieder speichern mit:
img->Picture->SaveToFile(ParamStr(1));
und fertig