바이너리 파일의 내용을 읽어 이미지로 변환을 하는 루틴입니다.
C++로 되어 있는걸 변환중이라.. 파일 내용은 좌표가 들어 있을거라는데요.
원래는 소켓으로 데이터를 받아야 되는데 일단 테스트로 파일로 받아 만들고 있습니다.
procedure TForm1.Button1Click(Sender: TObject);
var
aStream : TMemoryStream;
Buf : array of byte;
m_signx, m_signy, COL_NUM, ROW_NUM : Integer;
drawx, drawy : Integer;
row, Col, I : Integer;
val : byte;
begin
Try
aStream := TMemoryStream.Create;
aStream.LoadFromFile('C:\sign2.sgn');
SetLength(Buf, aStream.Size);
aStream.Position := 0;
aStream.writeBuffer(Buf, aStream.Size);
m_signx := 1;
m_signy := 1;
COL_NUM := 16;
ROW_NUM := 64;
Image1.Canvas.Rectangle(m_signx-1, m_signy-1, COL_NUM*8+m_signx, ROW_NUM+m_signy);
drawx := m_signx;
drawy := m_signy;
for row := ROW_NUM-1 DownTo 0 Do
begin
for col := 0 To COL_NUM - 1 Do
begin
val := Buf[row*COL_NUM+col];
for i := 0 To 7 Do
begin
if( ((val shr (8-i-1)) and $1) = 0) then
begin
Image1.Canvas.Pixels[drawx, drawy] := clBlack;
end;
Inc(drawx);
end;
end;
drawx := m_signx;
inc(drawy);
end;
Finally
aStream.Free;
end;
end;
이렇게 파일을 읽어 들이고
val := Buf[row*COL_NUM+col]; 의 Val 값을 메모에 뿌려보면
전부 0으로 되어 있습니다. 그러니 전부 검정색으로 칠해지네요.
파일 읽는 부분이 잘못된건지... 예제 파일은 잘못된건지...모르겠네요
첨부파일에 예제 파일이 있습니다. 제대로 읽으면 선이 몇개 나올 거라는데...
파일첨부가 일반파일은 안되서 확장자를 .pas를 없애야 됩니다.
==>
aStream.ReadBuffer(Buf[0], aStream.Size);