Jak zmienić bitmapę lub tekst na BAJT

0

Witam was!

Mam problem, mianowicie pracuje na Delphi 7 od kilku lat ale nigdy jeszcze nie potrzebowałem obsługiwać grafiki. :(

Chcę stworzyć symulator. Który będzie się składał z pixeli. Czyli rysuje sobie pixele jakieś pole które wcześniej w zmiennych sobie deklaruje jakiej jest rozdzielczości. Gdzie pole to wielokrotność 16x8pixel
zmienna szer = 25
zmienna wys = 25
szer x wys
18*25 x 8 *25
co daje mi 400x200 rozdzielczości.

Co pierwsze muszę zrobić to narysować pixele np o średnicy jakiejś tam w odstępie pomiędzy tymi pixelami równym średnicy tych pixeli. Tak żeby żeby było widać że symulator wyświetla text w pixelach a nie jako grafika.

Wyświetlać chcę animowany teks np. przesówny. Czyli piszę sobie w memo "ładna pogoda jest dzisiaj" i mi się wyświetla na moim symulatorze w postaci pixelowej i się przesuwa w lewo lub prawo.
Jak stworzyć taki obraz z pixeli?

Ja tak sobię rozmyślam czy nie idzie zamienić textu na postać jakąś liczbową [byte]? Nie umiem tego rozgryść czy ktoś może mi pomóc?

0

Stworz sobie osobny obiekt bitmapy, napisz na niej tekst, a potem w petli po (x,y) pobieraj kolor pikseli owej bitmapy i na bitmapie wyjsciowej rysuj prostokaty o zalozonej szerokosci/wysokosci w odpowiednim miejscu i kolorze.

Swoja droga post zdublowany i nie dotyczacy inzynierii oprogramowania:
http://4programmers.net/Forum/viewtopic.php?id=138597

0

skoro jeden pixel jest przeskalowany np (4 x szer ,3x wys )
to cały obrazek będzie przeskalowany (4x szer ,3 x wys)
wobec tego wystarczy narysować rozciągnięty obrazek na bitmapie 4 x szerszej i 3 x wyższej :P

procedure Zoom(Src : TBitmap ; var Dest :TBitmap; PX,PY:integer )  ;
begin
//PX = szerokoscc pixela
//PY = wysokosc pixela
Dest.Width :=Src.Width * PX;       //wymnazamy co trzeba
Dest.Height :=Src.Height * PY;
Dest.Canvas.StretchDraw(Rect(0,0,Dest.Width,Dest.Height),Src);  //rysujemy rozciagniete
end;

procedure TForm1.TESTClick(Sender: TObject);
var
Wzor , Pixeloza :TBitmap;
const Napis = 'Ale ladna dzisiaj pogoda';

begin
Wzor:= TBitmap.Create;             // tworzymy bitmapke normalna
Wzor.Width :=Wzor.Canvas.TextWidth(Napis) ;    //o szerokosci napisu
Wzor.Height :=Wzor.Canvas.TextHeight(Napis) ;     //i tez wysokosci
Wzor.Canvas.TextOut(0,0,Napis);    //piszemy napis

Pixeloza:= TBitmap.Create;   //tworzymy sobie bitmapke na pixelkowy obraz
Zoom(Wzor,Pixeloza,3,3);    //wywolujemy zoomik
Wzor.Free;             //zwalniamy wzor
Canvas.Draw(0,0,Pixeloza);      //rysujemy pixeloze
Pixeloza.Free;

end;

Wynik procedurki zoom

0

OK!

A czy wiecie jak zamienić bitmapę o rozdzielczości 16x8pix na postac np [bajt, bajt, bajt]
kiedyś czytałem że bitmapę można zamienić na 2 lub 3 bajty.

Potrzebuje zrobić do mojego projektu właścnie taki koder i enkoder.

0

Do tego słuzyć może ScanLine
troche przykładów w wersji praktycznej

0
procedure TForm1.Button1Click(Sender: TObject);
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    BitMap.LoadFromFile('mono.bmp');
    for y := 0 to BitMap.Height -1 do
    begin
      P := BitMap.ScanLine[y];

      for x := 0 to BitMap.Width -1 do
        P[x] := y;
    end;
    Canvas.Draw(0,0,BitMap);
  finally
    BitMap.Free;
  end;
end;

Dane z bitmapy

var
  Dane : array[1..16, 1..8] of Byte;

Koledzy jak odczytać z mono bitmapy o rozdzielczości 16x8 czy dany pxel jest biały czy czarny i wtedy jak wykryje biały to przypisze zmiennej Dane[y,x]:=0 lub 1;

0 będzie oznaczało biały pixel</li> 1 będzie oznaczało czarny(inny niż biały) pixel</li> </ul>

Co muszę zmienić w kodzie jaki wstawiłem u góry postu. Czy może ktoś dodać jakąś linijkę bo ja z grafiką sobie nie poradze :)

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