Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Schrifthöhe und -breite einstellen (https://www.delphipraxis.net/160477-schrifthoehe-und-breite-einstellen.html)

loirad 15. Mai 2011 14:30

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:
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.
Liegt das an der Schrifthöhe/-breite :?:
Woran iegt es :?:

Liebe Grüße
loirad

sx2008 15. Mai 2011 14:41

AW: Schrifthöhe und -breite einstellen
 
Ich kann jetzt nur vermuten, dass du die falsche Schriftart verwendest.
Man kann Fonts in zwei Gruppen einteilen:
* Proportional Fonts (Zeichen haben versch. Breiten)
* Monospaced Fonts (alle Zeichen gleich breit)
Für ASCII-Art sind ausschlieslich Monospaced Fonts geeignet.
Bekannte Monospaced Fonts sind: Courier New und Lucida Console.
siehe auch http://www.myfont.de/schriftarten/monospaced/index.html

loirad 15. Mai 2011 14:48

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!

p80286 16. Mai 2011 11:09

AW: Schrifthöhe und -breite einstellen
 
Zitat:

Zitat von loirad (Beitrag 1100924)
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.

Welches Seitenverhältnis?
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

shmia 16. Mai 2011 13:37

AW: Schrifthöhe und -breite einstellen
 
Zitat:

Zitat von p80286 (Beitrag 1101049)
Das kann zunächst einmal mit den meisten Fonts nicht klappen, da die meisten "Buchstabenzellen" höher als breit sind.

Jupp, man bräuchte einen Font mit Breite=Höhe.
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

loirad 16. Mai 2011 15:55

AW: Schrifthöhe und -breite einstellen
 
@p80286: Genau dass meinte ich!
Zitat:

da die meisten "Buchstabenzellen" höher als breit sind
Welche denn nicht?
@all: Danke für eure Hilfe!!! :thumb:

p80286 16. Mai 2011 16:06

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 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz