Ascii-Art auto-generated

Anfängerfragen zum Programmieren mit PureBasic.
es_91
Beiträge: 410
Registriert: 25.01.2011 04:48

Ascii-Art auto-generated

Beitrag von es_91 »

Ich experimentiere mit Ascii Art auf einer Console bzw. als Bitmap.

Früher hat man sowas vielleicht händisch nach Augenmaß eingetipperlt, etwa so:

Code: Alles auswählen

####  ####  ####   #   #
#  #  #     #      #   #  
####  ####  #      #   #
#  #     #  #      #   #
#  #  ####  ####   #   #
...aber das dauert lang und richtig geil wäre natürlich, optisch an heutige ClearType-Fonts heranzukommen.

Also entsteht die ganz einfache Theorie: ich wandle Vektorschriftzüge in Pixel um und rechne Pixel in Ascii-Zeichen um.

Dazu folgende Frage: Soetwas nutzt man ja ganz gern mal in einer CLI-Anwendung. Ist es eigentlich sicher, die dafür notwendigen Funktionen aus der Image-Bibliothek und der Fonts-Bilbiothek anzurufen oder könnte dies auf manchen Systemen Fehler hervorrufen? Image und Font dürften ja technologisch weit über der Console liegen, darum die Frage.

Gibt es vielleicht hier schon eine Implementierung, die nicht nur weiße Rauten setzt sondern mit aller Raffiness solche Ascii-Art Bilder generiert?

Hier meine eigene (primitivere) Implementierung, die die Herangehensweise zeigt:

Code: Alles auswählen


procedure  drawBanner  (  text$  )

;{
	
	;{
		
		protected  *img
		protected  *fnt
		protected  *grb
		
		protected  txSpanX
		protected  txSpanY
		
	;}
	
	
	*img  =  createImage  (  #pb_any,  
	                         1024,  
	                         1024  )
	
	createImage  (  #null,  
	                1,  
	                1  )
	
	*fnt  =  loadFont  (  #pb_any,  
	                      "FixedSys",  
	                      9  )
	
	if  (  startDrawing  (  imageOutput  (  *img  )  )  )
		
		;{
			
			if  (  (  *fnt  )  and  (  isFont  (  *fnt  )  )  )
				
				;{
					
					if  (  fontId  (  *fnt  )  )
						
						;{
							
							drawingFont  (  fontId  (  *fnt  )  )
							
							drawText  (  0,  
							             0, 
							             text$,  
							             #white,  
							             #black  )
							
							txSpanX  =  textWidth  (  text$  )
							txSpanY  =  textHeight  (  text$  )
							
						;}
						
					endIf
					
				;}
				
			endIf
			
			stopDrawing  (  )
			
			grabImage  (  *img,  
			              #null,  
			              0,  
			              0,  
			              txSpanX,  
			              txSpanY  )
			
		;}
		
	endIf
	
	
	if  (  startDrawing  (  imageOutput  (  #null  )  )  )
		
		;{
			
			enableGraphicalConsole  (  #true  )
			
			for  y  =  1  to  imageHeight  (  #null  )  -  1
			
			;{
				
				for  x  =  1  to  imageWidth  (  #null  )  -  1
				
				;{
					
					consoleLocate  (  x,  y  )
					
					if  (  point  (  x,  y  )  =  #white  )
						
						;{
							
							print  (  "#"  )
							
						;}
						
					endIf
					
				;}
				
				next
				
			;}
			
			next
			
		;}
		
	endIf
	
;}

endProcedure


if  (  openConsole  (  )  )
	
	;{
		
		drawBanner  (  "PureBasic v6"  )
		
		input  (  )
		
		closeConsole  (  )
		
	;}
	
endIf

Benutzeravatar
H.Brill
Beiträge: 496
Registriert: 15.10.2004 17:42
Wohnort: 66557 Neunkirchen

Re: Ascii-Art auto-generated

Beitrag von H.Brill »

Nur mal so eine Idee von mir.

Um nicht alle Buchstaben usw. immer wieder neuzeichnen zu müssen, könnte auch eine ImageList, die eine Toolbar lädt, interessant sein.
Anhand der Indexnummer von der Imagelist könnte man dann den entsprechenden Buchstaben oder Zeichen herauspicken und als Icon
anzeigen. Man muß sich halt so eine Hash-Liste erstellen, die den Buchstaben und Indexnummer enthält. Stretchen (Größe in der Imagelist festlegen) kann man ja auch, wenigstens mal in gewissem Maße. Man muß sich halt einmal die Arbeit machen und eine Toolbar mit hintereinanderliegenden Bildchen erstellen.

Ich habe mal folgendes gemacht :
Auf
https://www.topster.de/text-to-ascii/banner3.html
einzelne Buchstaben eingegeben und mit dem Windows-Snipping Tool als Rechteck ausgeschnitten. In Paint o.ä. kann man das ja mit
STRG+V wieder einfügen. Müßte man dann mit allen Buchstaben und Zahlen machen.
PB 6.10
Antworten