Avatar billede tango42 Nybegynder
06. august 2003 - 10:24 Der er 9 kommentarer og
1 løsning

At se bit-værdien af en stream eller et JPEG billede

Jeg har lavet et program, som sender et JPEG billede fra en computer til en anden via UDP (NMUDP komponenten)...Det gøres ved at lave billedet om til en stream (Jpg.SaveToStream(DataStream)). Det jeg ønsker er en komponent eller en funktion som kan lave en stream eller et JPEG billede om til bits, så jeg kan se værdien som bit i stedet... Nogen idéer?
Avatar billede borrisholt Novice
06. august 2003 - 10:26 #1
Ja du kan jo blot læse bid for bid af din Stream som integers
Avatar billede tango42 Nybegynder
06. august 2003 - 10:55 #2
Det ku være rart hvis jeg ku se streamen som 0 og 1-taller....
Avatar billede borrisholt Novice
06. august 2003 - 11:45 #3
jo jo .. du kan saktens finde noget der kan konvetere en Integer til en bit streng
Avatar billede tango42 Nybegynder
06. august 2003 - 11:48 #4
Jeg synes ikke der er nogen funktion som laver en stream til integer...
Avatar billede dkn Nybegynder
06. august 2003 - 13:42 #5
0 og 1 taller er maskin kode, det kan du nok ikke lige få frem udenvidere, men du kan som borrisholt siger læse hver bit som dens svarende integer værdi.
Avatar billede borrisholt Novice
06. august 2003 - 14:00 #6
Hav lidt tålmodighed ....
Avatar billede borrisholt Novice
06. august 2003 - 14:00 #7
Så skal jeg nok lave et eks
Avatar billede athlon-pascal Juniormester
06. august 2003 - 15:06 #8
Da denne kode konverterer et binært tal til integer, er det naturligvis også muligt den anden vej :-)

function Bin2Dec(Bin: String): Integer;
var
  Negativ, IsBin: Boolean;
  I, J, K: Integer;
begin
  Result := 0;
  IsBin := true;
  if Length(Bin) < 1 then
    Exit;
  if Pos('-', Bin) = 1 then
  begin
    if Length(Bin) < 2 then
      Exit;
    Negativ := true;
    Delete(Bin, 1, 1);
  end;
  for I := 1 to Length(Bin) do
    if IsBin then
      IsBin := Pos(Bin[I], '01') > 0;
  for I := 1 to Length(Bin) do
  begin
    K := 1;
    for J := 1 to Length(Bin) - I do
      K := 2 * K;
    Result := Result + StrToInt(Bin[I]) * K;
  end;
  if Negativ then
    Result := Result * -1;
end;
Avatar billede doc404 Novice
07. august 2003 - 00:49 #9
Her har du et eksempel på at læse en stream og få vist hvert enkelt tegn som binær...

function ByteToBin(b : byte) : string;
var
  n : integer;
begin
  Result := '';
  for n := 7 downto 0 do
    if (b and (1 shl n)) <> 0 then
      Result := Result + '1'
    else
      Result := Result + '0';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Buf : byte;
  fs  : TFileStream;
begin
  fs := TFileStream.Create('test.txt',fmOpenRead);
  while fs.Read(Buf,1) <> 0 do ShowMessage(Char(Buf) + ':' + ByteToBin(Buf));
  fs.Free;
end;
Avatar billede tango42 Nybegynder
08. august 2003 - 11:54 #10
Jeg takker doc404.... Det var lige det jeg manglede...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester