Tekst na bitmapę

0

Witam! Od kilku godzin kombinuję i zastanawiam się nad problemem dotyczącym konwersji danych z tekstu na bitmapę. Otóż - mam sobie memo, w którym:

  • Jest 48 linijek,
  • W każdej linijce jest po 84 znaki,
  • Każda linijka składa się jedynie ze znaków # i . [kropka] ;)

I teraz - mamy jeden komponent TImage, zalozmy, ze o nazwie 'img'. A oto moje pytanie - Jak za pomocą Canvas utworzyc obrazek w TImage "przerysowując" tekst znajdujacy sie w memo, ale by znak # stanowił czarny pixel, a jakikolwiek inny [np. kropka] zostal narysowany jako bialy pixel na obrazku?

Tutaj załączam malutki przykładzik:

  • pliku tekstowego
<font size=1>....................................................................................
....................................................................................
....................................................................................
....................................................................................
......................................#.#.##.#......................................
....................................#..#.#....#.....................................
..................................#..#..#..#.##.....................................
............................#..#.#..#..#..#.##......................................
..........................#..#..#.#..#..#.###.......................................
....................#.#.#.....#.#..#..#..##.........................................
...............#..#......#.#.#.#.##.##.###..........................................
............#....#..##.#....#..#.#.##.#.............................................
.........#....#....#....#.#..##.####.#..............................................
.......#...#...#.#...#.#..##..###...................................................
.........#...#.....#..#..#..###.....................................................
.....#......#.#.#.#..#..#.#.#....................#.#..#..#..........................
.......#..#......#..#..#...#.#.............#.##.#...#..#...#.#.#..#.................
#..#.......#.#.#.........#..#..........#.#..#..#.##.##..#.......#...#.#.#...........
.....#.#.#....#..#.#.#.#..#..##......#....##.##.#..#..#...#..#...........#.#.#......
...#.......#.#..#.................###.#####.##.#######.#.#.....#...#..#........#.#..
.#...#.#.#..#..#..#..#..#..#.#.#.#.#.##.#################...#...........#..#.......#
.......#..#..#..#.............#.#.####################.###...#...............#......
.#.#.#..#.#.#..#...#..#..#..#........####.#################.#....#..............#..#
.......#.#.#..#...#.....#.....#.#.#.#...###############.#..........#..#..#.#..#.....
#.#.#.#.#.#.##.##...#.....#.#......#.#.#####.###.#.............#................#.#.
.#...#.#.#.#.#...#...#.#......#.#.....#...####.............#........#..#...#.#.#...#
..##.#.######.##.#.#....#.#.#..#..#.#...#...#.#....#.....#...#..#.#...#..#..#.#.##.#
.#..####.#.#.##.##.#.#.#...#.##..#...#.#...#.#.#.#...#.##..##.##..#.##..#.##.####.##
#.##.#.##########.###.##.###.#.##.##....###.#.#########..###########.######.##.#####
.#########.##.#.###.###########.##..###....#.#.#.####..#.....######################.
###.###################.##.#####.####..#.#.#.#.##.######.#.......#.#################
#####.##.####.####.#.#.##.##.#######.##.#.#..#....#.#.######...........#############
###########.####.##########.##.##########.#.#..#...........###.#..........#####.....
#####################.#.#.##.#.....#########.#..#..#............###.#...............
##################################....#.##.####.#.#..#...#....#.......#.............
##############################.#.#.#.#..#.######.##.#...#...#.......#..#............
........######.##.###################.#..#.#.#.###.#####.##..#.#.#.#..#.............
............#############.##.###########.#..#.#######.#########.###.#.#.............
...............######.#########.#.#.#####.##.#....#.#####.##.####.#######...........
...................###########.###.##.#######.####.#.#.#.##.#######.#..#.#..........
..........................##########.#.########.#.#.#.###.###.#.#######.#...........
..............................##########.##.##########.###.#.####.#.####............
....................................################################................
...........................................####################.....................
....................................................................................
....................................................................................
....................................................................................
....................................................................................</font>
  • oraz bitmapki:

user image

Z góry dziękuję za wszelką pomoc. Cheers</u>

0

hmmm
czytasz po znaku kazda linijke w memo i jezeli ten znak ='#' to rysujesz czarny pixel.

psełdokod: [specjalnie napisalem to tak, a nie inaczej]
for y:=0 to memo1.lines.count-1 do
for x:=0 to length(memo1.lines[y])-1 do
if memo1.lines[y][x]='#' then
canvas.pixels[x,y]:=clBlack;

oczywiscie bardzo nieoptymalne, ale dziala.

0

Tu masz kod jednak zawiera on jakiś błąd ale jest bliski poprawności :) :

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  Y: Integer;
begin
  for I:=0 to Length(Memo1.Text)-1 do
  begin
    if I mod 84 = 0 then
      Y:=I div 84-1
    else
      Y:=I div 84;
   if I=0 then Y:=0
   if Memo1.Text[I]='#' then
      Form1.Canvas.Pixels[(I-84*Y)-1, Y]:=clBlack;
   if Memo1.Text[I]='.' then
      Form1.Canvas.Pixels[(I-84*Y)-1, Y]:=clWhite;
  end;
end;

Czy ktoś mi może powiedzieć gdzie tu jest błąd ? [???]

0

Prawdopodobnie nie uwzględniłeś enterów.

0
procedure TForm1.Button1Click(Sender: TObject);
var
  X, Y, C, L: Integer;
begin
  C := Memo1.Lines.Count;
  if C > 48 then
  begin
    ShowMessage('Nieprawidłowy format ASCII - za dużo wierszy!');
    Exit;
  end;
  for X := 0 to C - 1 do
  begin
    L := Length(Memo1.Lines[X]);
    if L > 84 then
    begin
      ShowMessage('Nieprawidłowy format ASCII - za dużo znaków w wierszu!');
      Exit;
    end;
    for Y := 0 to L - 1 do
    begin
      if Memo1.Lines[X][Y] = '#' then Canvas.Pixels[Y, X] := clBlack;
      if memo1.lines[X][Y] = '.' then Canvas.Pixels[Y, X] := clWhite;
    end;
  end;
end;

Hmm, grafa z ASCII Artu? Nawet fajne; właśnie mam nową funkcję do mojego softu graficznego :d

0

Dziękuję Wam wszystkim za odpowiedzi, oraz oczywiście pomoc :) Łaaa jestescie wspaniali ;) Duuzo greetzów dla Panów ;P [browar] [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1