Aus einer Schrift ein Bild machen
-
Hallo
Ich habe da ein kleines Problem. Ich möchte einen Text (selbst geschrieben oder aus dem Programm entnommen) in ein Bitmap speichern. In meinen ersten Versuchen habe ich dabei mit CEdit das TextControl Feld angewählt, die Schrift gesetzt und in einen CPaintDC schrieben. Danach habe ich, wie hier im Forum schon beschrieben, diesen DC in das Bitmap geschrieben. Klappt soweit. Was mich nun aber stört ist, dass die Schriftlänge durch das TextControl Feld begrenzt ist. Dabei möchte ich doch eine möglichst grosse Schrift wählen, damit das Bild nachher gut auf einem speziellen Drucker ausgedruckt werden kann. Die Schrift im generierten Bild soll also wenigstens 100-150 Pixel hoch sein. Ausserdem soll der Benutzer diese Schrift nicht auf seinem Bildschirm sehen können.
Hat jemand einen Tipp, wie ich das Problem lösen könne?
Vielen Dank!
-
Hm, schau mal ob Du mit dem Stichwort
DrawText bzw. mit TextOut was anfangen kannst.
Ist lange her, habe aber so mal vor langer Zeit grafiken für nen Barcodedrucker erzeugt...
-
Hallo
Da hätte ich ein Code-Snippet von einen älteren
Projekt von mir. Speichert zwar ein TGA aber sollte
man einfach ändern können.Wenn nicht google mal nach "Bitmap font". Wird in
Spielen häufig verwendet.struct TGAHeader { BYTE IDLength; BYTE ColorMapType; BYTE DataTypeCode; WORD wColorMapOrigin; WORD wColorMapLength; BYTE ColorMapDepth; WORD wOriginX; WORD wOriginY; WORD wWidth; WORD wHeight; BYTE BitDepth; BYTE ImageDescriptor; }; iOutputWidth = 256; iOutputHeight = 256; TGAHeader Header; // TGA-Datei speichern pFile = fopen(pcTGAFilename, "wb"); // Header schreiben Header.IDLength = 0; Header.ColorMapType = 0; Header.DataTypeCode = 2; Header.wColorMapOrigin = 0; Header.wColorMapLength = 0; Header.ColorMapDepth = 0; Header.wOriginX = 0; Header.wOriginY = 0; Header.wWidth = (WORD)(iOutputWidth); Header.wHeight = (WORD)(iOutputHeight); Header.BitDepth = 32; Header.ImageDescriptor = 32; fwrite(&Header, sizeof(TGAHeader), 1, pFile); // Daten schreiben for(int y = 0; y < iOutputHeight; y++) { for(int x = 0; x < iOutputWidth; x++) { dwColor = GetPixel(hDC, x, y); // Hier kannst du dir die Oberfläche aussuchen // die in das TGA geschrieben wird if(dwColor != RGB(0, 0, 0)) RGBColor = 255; else RGBColor = 0; Alpha = 0; fwrite(&RGBColor, sizeof(BYTE), 1, pFile); fwrite(&RGBColor, sizeof(BYTE), 1, pFile); fwrite(&RGBColor, sizeof(BYTE), 1, pFile); fwrite(&Alpha, sizeof(BYTE), 1, pFile); } } // Datei schließen fclose(pFile);
-
Danke Leute für die Hinweise. Den DC habe ich erstellt und mit DrawText (TextOut würde auch funktionieren) hineingeschrieben, und dann mit der Funktion WriteBitmap aus dem WINAPI Forum in das File geschrieben. Und es klappt so, wie ich es wollte. Das Problem ist jetzt nur noch, dass das Bitmap eine Farbtiefe von 24 Bit hat, ich möchte es aber nur mit 1-bit Farbtiefe haben. Muss da noch ein paar Parameter anpassen, oder weiss gerade jemand, was ich da alles anpassen muss?
-
Link zur WriteBitmap-Funktion bitte.
-
Im WINAPI Forum habe ich keine WriteBitmap Funktion gefunden.
Meinst du http://www.c-plusplus.net/forum/viewtopic.php?t=52636&highlight=writebitmap
-
Ja genau die meinte ich.