<!--CodeS-->
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
InBuf : TRecv;
SendBuf : array [0..4] of Char;
m_signx, m_signy, COL_NUM, ROW_NUM : Integer;
drawx, drawy : Integer;
row, Col, I : Integer;
val : byte;
Invoice, ret : String;
signimg : Variant;
aStream : TMemoryStream;
myJpeg : TJPEgImage;
begin
AThread.Connection.ReadBuffer(InBuf , sizeof(TRecv));
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 := InBuf.Sign[(row*COL_NUM+col)];
// Memo1.Lines.Add(IntToStr(Memo1.Lines.Count) + ' ' + intTohex(val, 8));
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;
Self.Refresh;
Memo1.Lines.Add('이미지번호 : ' + InBuf.Invoice);
Image1.Picture.SaveToFile(ExtractFilePath(application.ExeName) + '\SIGN\' + Trim(InBuf.Invoice) + '.jpg');
setLength(Ret, 5);
Ret := '0005Y';
CopyMemory(@SendBuf[0], @Ret[1], 5);
AThread.Connection.WriteBuffer(SendBuf, 5);
end;
<!--CodeE-->
소스는 위와 같습니다.
보시는 바와 같이 소켓통신이구요.. 핸드폰에서 이미지 좌표를 binary로 전송하면
서버에서 데이터를 받아 화면Image.canvas에 그리고 이를 저장합니다.
문제는 도무지 이해가 안되는데 For문 중간에 주석란 Memo에 들어온값을 뿌려주면
이미지 그리는게 나오면서 저장이 잘됩니다.
주석으로 처리하면 이미지가 1/3쯤만 저장되고 화면에 그려지지도 않습니다.
최소한 Image1.Canvas.Rectangle() 로된 사각형은 그려져야 정상인데 이것조차 안나오니
이해가 안됩니다.