Autor |
Beitrag |
Nano-Ware
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Do 03.06.10 11:28
Hey,
ich würde gerne in meinem Programm verschiedene Texte mit einer Gelben besonderen schrift schreiben (siehe Dateianhang) nur wie ist das am Besten möglich diese Schrift darzustellen, falls mein erster Gedanke gut ist helft mir bitte bei der umsetzung ;D
Also
Nehmen wir an man hat ein Gitter von 64x64 genommen dass man einfach die einzelen Buchstaben herauskopiert und neu zeichnet.. Ich habe leider garkeinen Ansatz möchte aber auch keinen C&P Code haben wichtig ist auch, dass das Bild im Programm eingebunden sein soll, weil es keine Extradateien geben soll.... THX^^
Einloggen, um Attachments anzusehen!
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 03.06.10 11:58
Soweit ich weiß, benutzt Winamp auch (optional/früher mal) solche "Bitmap Schriften". Man ist dann natürlich auf diese Zeichen beschränkt, d.h. Sonderzeichen oder gar Unicode kann man dann vergessen.
Vorgehensweise ist dann die: Den String durchgehen, für jedes Zeichen die passenden Gitterkoordinaten ausrechnen, das per CopyRect (oder ähnliches) auf das Zielcanvas kopieren und dann die "Zielkoordinaten" ändern, damit das nächste Zeichen daneben gemalt wird.
Das Bild könnte als Ressorce eingebunden sein, oder etwas Quick&Dirty in einer ImageList, wobei man bei der ImageList natürlich auch die Einzelzeichen speichern könnte, was dann auch wieder Vorteile hätte. Denn dann müsste man die Einzelgrafiken nicht aus dem großen Bild rauspopeln.
_________________ We are, we were and will not be.
|
|
Nano-Ware 
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Do 03.06.10 12:26
Stimmt ich versuch das einfach mal
--- Moderiert von Narses: Beiträge zusammengefasst---
Leider komme ich ganz und garnicht weiter.. Mit Grafiken habe ich mich leider noch nicht beschäftigt ;D also ich schaue wieviele Buchstaben der Text hat und rechne dann Anzahl mal 64 nur wie erstlle ich jetzt eine leere Bitmap und trage dann alle 64pix einen bestimmten Buchstaben(Bild) ein?
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 04.06.10 00:07
Hey,
das besste is wenn du dir da ne Prozedur machst, die dir die BMP zusammen setzt. Du weißt ja die Breite eines jeden Buchstabens. und die Länge des Strings hast du auch, also muss die BMP.width := Length(str) * CHAR_WIDTH sein. Mit der Höhe is es dann ähnlich, kommt drauf an ob du Zeilenumbrüche oder sowas drin hast. Mit BMP.Canvas.CopyRect() kannst du dann bestimmte bereiche aus der BMP mit den Buchstaben in die neue BMP kopieren. (siehe Delphi-Hilfe).
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Nano-Ware 
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Fr 04.06.10 00:16
Ich würde das so versuchen, dass jeder Buchstabe in einer Imagelist gespeichert ist. Könntest du eventuell ein Beispiel machen? Bei dem eine Bitmap mit Höhe 64px und Breite 2x64px erstellt wird und dann aus einer ImageList an Stelle 1 ein Bild aus ImageList1 mit index 0 und an Stelle 2 eins mit Index 1 kopiert wird? Wie schon gesagt habe ich leider keinen Ansatz ... währe nett;D thx schonma
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 04.06.10 00:44
Hey,
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113:
| procedure GetBitmapFontString(bmp: TBitmap; str: String); var Font: TBitmap; var i, x, y: Integer; var SourceRect, DestRect: TRect; begin Font := TBitmap.Create; Font.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'font.bmp');
str := LowerCase(str); i := 1; while i <= Length(str) do begin if not (str[i] in [' ','a'..'z','.','!','?','0'..'9',',',':','-','"','$','''']) then delete(str, i, 1) else inc(i); end;
x := 0; y := 0; bmp.Width := Length(str) * 64; bmp.height := 64; for i := 1 to Length(str) do begin case str[i] of ' ': begin x := 0; y := 0; end; 'a'..'z': begin x := Ord(str[i])-96; y := 0; while x > 15 do begin dec(x, 16); inc(y); end; end; '.': begin x := 11; y := 1; end; '!': begin x := 12; y := 1; end; '?': begin x := 12; y := 1; end; '0': begin x := 7; y := 2; end; '1'..'9': begin x := Ord(str[i])-35; y := 0; while x > 15 do begin dec(x, 16); inc(y); end; end; ',': begin x := 8; y := 2; end; ':': begin x := 9; y := 2; end; '-': begin x := 10; y := 2; end; '"': begin x := 11; y := 2; end; '$': begin x := 12; y := 2; end; '''': begin x := 13; y := 2; end; end;
SourceRect := Rect( X * 64, Y * 64, (X+1)* 64, (Y+1) * 64); DestRect := Rect((i-1)* 64, 0, i * 64, 64); bmp.Canvas.CopyRect(DestRect, font.Canvas, SourceRect); end;
Font.Free; end; |
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Nano-Ware 
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Fr 04.06.10 01:15
Vielen Dank erstmal ;D ich hab leider nur diesen Teil nicht verstanden:
Delphi-Quelltext 1: 2: 3: 4: 5:
| SourceRect := Rect( X * 64, Y * 64, (X+1)* 64, (Y+1) * 64); DestRect := Rect((i-1)* 64, 0, i * 64, 64); bmp.Canvas.CopyRect(DestRect, font.Canvas, SourceRect); end; |
1. Was ist TRect?
2. Ich weiß auch nicht was CpbyRect für Parameter erwartet und wie der geht xD
Also was ist dann in SourceRect und was in DestRect
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 04.06.10 01:18
gibt mal hier TRect und CopyRect ein.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 04.06.10 01:21
Hey,
TRect definiert ein Rechteck, aus dem dann die Daten kopiert werden. Die Parameter für CopyRect sind (Zielrechteck, QuellCanvas, Quellrechteck). Also kopiert CopyRect alles was in SourceRect ist, von der SourceCanvas auf die Canvas des Objekts welches CopyRect aufruft, in den Breich von DestRect. Das hättest du aber auch ganz einfach in der Hilfe nachlesen können, dazu ist sie da! Also bitte in Zukunft erstmal bisl Eigeninitiative zeigen, denn es ist nich der Sinn der Sache das wir dir alles machen. Wenn du dir das selber erarbeitest beleibts wenigstens im Kopf
Mfg Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Nano-Ware 
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Fr 04.06.10 01:25
Danke Bergmann ich habs verstanden
EDIT// Wenn ich jetzt jeden Buchstaben einzeln in einer Imagelist hab geht ja CopyRect nichtmehr^^ wie "male" ich dann das ganze Bild in die Bitmap?
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 04.06.10 01:37
canvas.Draw mehr verrat ich jetzt mal nicht  Und CopyRect würde auch noch gehen, musst halt das Rect so groß wie die Canvas machen...
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Nano-Ware 
      
Beiträge: 394
Erhaltene Danke: 7
|
Verfasst: Fr 04.06.10 08:24
Okay vielen Dank hab es hinbekommen und sry dass ihr soviel schreiben musstet ich hatte einfach keine Ahnung
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 04.06.10 18:20
Kein Problem, dazu is das Forum ja da. Aber wie gesagt: Selbst ist der Mann 
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|