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.


Anmelden zum Antworten