![]() |
Schrifthöhe und -breite einstellen
Hallo liebe Delphi-PRAXISler :wink:,
kann man irgendwie in einem Richedit die Schrifthöhe bzw. -breite einstellen? Das Problem ist, dass bei meinem ASCII-Art Programm das Seitenverhältniss beibehalten wird. Hier ist mein Quelltext :arrow:
Code:
Liegt das an der Schrifthöhe/-breite :?:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtDlgs, ExtCtrls, JPEG, StdCtrls, Gauges, Spin, ComCtrls; type TForm1 = class(TForm) MainMenu1: TMainMenu; Datei1: TMenuItem; ffnen1: TMenuItem; Speichern1: TMenuItem; Schlieen1: TMenuItem; Anzeige: TImage; OpenPictureDialog1: TOpenPictureDialog; test1: TMenuItem; Genauigkeit: TSpinEdit; LGenauigkeit: TLabel; LGroesse: TLabel; Groesse: TSpinEdit; ASCII: TRichEdit; procedure Schlieen1Click(Sender: TObject); procedure ffnen1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure test1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Schlieen1Click(Sender: TObject); begin close; end; procedure TForm1.ffnen1Click(Sender: TObject); begin with OpenPictureDialog1 do if Execute then Anzeige.Picture.LoadFromFile(FileName); end; procedure TForm1.FormCreate(Sender: TObject); begin Anzeige.Height:=Form1.ClientHeight-Genauigkeit.Height; Anzeige.Width:=Form1.ClientWidth div 3; ASCII.Left:=Form1.ClientWidth div 3; ASCII.Width:=Form1.ClientWidth-Form1.ClientWidth div 3; ASCII.Height:=Form1.ClientHeight; DoubleBuffered:=true; end; procedure TForm1.test1Click(Sender: TObject); var i,j:integer; Farbe:TColor; begi ASCII.Clear; ASCII.Font.Size:=Groesse.Value; i:=0; j:=0; while i < Anzeige.Picture.Graphic.Height do begin while j < Anzeige.Picture.Graphic.Width do begin Farbe:=Anzeige.Canvas.Pixels[j,i]; if (GetRValue(Farbe)<100) and (GetGValue(Farbe)<100) and (GetBValue(Farbe)<100) then ASCII.Text:=ASCII.Text+'#' else ASCII.Text:=ASCII.Text+' '; j:=j+Genauigkeit.Value; end; i:=i+Genauigkeit.Value; ASCII.Text:=ASCII.Text+#13#10; Application.ProcessMessages; j:=0; end; end; end. Woran iegt es :?: Liebe Grüße loirad |
AW: Schrifthöhe und -breite einstellen
Ich kann jetzt nur vermuten, dass du die falsche Schriftart verwendest.
Man kann Fonts in zwei Gruppen einteilen: * ![]() * ![]() Für ASCII-Art sind ausschlieslich Monospaced Fonts geeignet. Bekannte Monospaced Fonts sind: Courier New und Lucida Console. siehe auch ![]() |
AW: Schrifthöhe und -breite einstellen
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Courier New. Im Anhang hab ich mal das komplette Projekt!
|
AW: Schrifthöhe und -breite einstellen
Zitat:
Wenn ich Dein Programm richtig verstanden habe, übersetzt Du Pixel aus einem Bild in Buchstaben. Das kann zunächst einmal mit den meisten Fonts nicht klappen, da die meisten "Buchstabenzellen" höher als breit sind. Eine Möglichkeit das zu überdecken wäre, mit Textout zu arbeiten, da Du dann die Möglichkeit hast, den Zeilenabstand zu manipulieren. Gruß K-H |
AW: Schrifthöhe und -breite einstellen
Zitat:
Oder man löst das Problem dadurch, dass man bei der Umsetzung entsprechend skaliert. Angenommen das Bild wäre 400 * 400 Pixel. Der Font hätte 12 * 16 Pixel. Dann müsste man ausrechnen, wie viele Textzeilen und Textspalten notwendig sind um möglicht das Aspekt-Ratio (=Breite/Höhe) beizubehalten. Man wird das ursprüngliche Aspekt-Ratio in aller Regel nicht genau treffen sondern höchstens annähern. Dazu kommt noch ein Skalierungsfaktor mit dem man Textoutput insgesamt grösser oder kleiner machen kann. Ein kleiner mathematischer Kraftakt. :-D |
AW: Schrifthöhe und -breite einstellen
@p80286: Genau dass meinte ich!
Zitat:
@all: Danke für eure Hilfe!!! :thumb: |
AW: Schrifthöhe und -breite einstellen
Wenn ich mich nicht vertue, gab(/gibt) es Bildschirmfonts mit 7x7 und 8x8 Pixeln.
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz