Q&A

  • JPG FILE DB에 저장,읽기 ==> 화면 30%이상
여기 저기서 쏘스를 구해서

SQL_SERVER DB에 저장하고, 읽기까지 성공하였는데

TIMAGE 컴포넘트에서 해상도(?)가 문제입니다.

TABLE 컴포넌트를 써서 읽으면 해상도(완성도) 100%

QUERY 컴포넌트를 써서 읽으면 해상도(완성도) 70%

상태는 다음과 같습니다.

-------------------------

| |

| |

| |

| 정상 |

| |

| |

| |

| |

-------------------------

| |

| 깨져서 나옴 |

| |

-------------------------

[TIMAGE]



델파이 고수님들의 조언을 부탁드립니다.(긴급)



그리고 참고쏘스를 올려주신 분께 감사드립니다.



procedure TForm1.Button1Click(Sender: TObject);

begin

Query1.Close;

Query1.SQL.Clear;

Query1.SQL.Add('INSERT INTO test_pic ');

Query1.SQL.Add('(pic_NO,pic_IMAGE) ');

Query1.SQL.Add('VALUES (:pic_NO, :pic_IMAGE)');

Query1.ParamByName('pic_no').AsString := Edit1.Text;

Query1.ParamByName('pic_IMAGE').LoadFromFile('c:aaaa4444.jpg',FTBLOB);

Query1.Prepare;

Query1.ExecSQL;

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

Query2.open;

// table1.open;

end;



procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);

var

aJpeg : TJpegImage;

Buffer: PChar;

MemSize: Integer;

BStream : TStream;

begin

Image1.Picture := nil;

BStream := Query2.CreateBlobStream(Query2.FieldByName('pic_IMAGE'),bmRead);

// BStream := table1.CreateBlobStream(table1.FieldByName('pic_IMAGE'),bmRead);

MemSize := BStream.Size;

Inc(MemSize);

Buffer := AllocMem(MemSize);

try

BStream.Read(Buffer^, MemSize);

BStream.Position := 0;

aJpeg := TJPEGImage.Create;

try

aJpeg.LoadFromStream(BStream);

Image1.Picture.Assign(aJpeg);

finally

aJpeg.Free;

end;

finally

FreeMem(Buffer, MemSize);

end;



end;



1  COMMENTS
  • Profile
    남기석 2001.07.03 08:16
    안녕하세요

    청개구리 남기석( http://www.delphitravel.com )입니다.



    쿼리를 이용해서 받은 파일을 저장해 보면

    아마도 32KB 정도 될 것입니다.



    이것은 BDE 에서 BLOB SIZE 를 32 KB 로 주었기 때문입니다.

    BDE 에서 오라클 Alias 의 BLOB SIZE 를 적당한 크기로 늘려주시면

    해결될 겁니다.



    도움이 되셨기를...



    ======================================================================

    아이보리 wrote:

    > 여기 저기서 쏘스를 구해서

    > SQL_SERVER DB에 저장하고, 읽기까지 성공하였는데

    > TIMAGE 컴포넘트에서 해상도(?)가 문제입니다.

    > TABLE 컴포넌트를 써서 읽으면 해상도(완성도) 100%

    > QUERY 컴포넌트를 써서 읽으면 해상도(완성도) 70%

    > 상태는 다음과 같습니다.

    > -------------------------

    > | |

    > | |

    > | |

    > | 정상 |

    > | |

    > | |

    > | |

    > | |

    > -------------------------

    > | |

    > | 깨져서 나옴 |

    > | |

    > -------------------------

    > [TIMAGE]

    >

    > 델파이 고수님들의 조언을 부탁드립니다.(긴급)

    >

    > 그리고 참고쏘스를 올려주신 분께 감사드립니다.

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > Query1.Close;

    > Query1.SQL.Clear;

    > Query1.SQL.Add('INSERT INTO test_pic ');

    > Query1.SQL.Add('(pic_NO,pic_IMAGE) ');

    > Query1.SQL.Add('VALUES (:pic_NO, :pic_IMAGE)');

    > Query1.ParamByName('pic_no').AsString := Edit1.Text;

    > Query1.ParamByName('pic_IMAGE').LoadFromFile('c:aaaa4444.jpg',FTBLOB);

    > Query1.Prepare;

    > Query1.ExecSQL;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > Query2.open;

    > // table1.open;

    > end;

    >

    > procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);

    > var

    > aJpeg : TJpegImage;

    > Buffer: PChar;

    > MemSize: Integer;

    > BStream : TStream;

    > begin

    > Image1.Picture := nil;

    > BStream := Query2.CreateBlobStream(Query2.FieldByName('pic_IMAGE'),bmRead);

    > // BStream := table1.CreateBlobStream(table1.FieldByName('pic_IMAGE'),bmRead);

    > MemSize := BStream.Size;

    > Inc(MemSize);

    > Buffer := AllocMem(MemSize);

    > try

    > BStream.Read(Buffer^, MemSize);

    > BStream.Position := 0;

    > aJpeg := TJPEGImage.Create;

    > try

    > aJpeg.LoadFromStream(BStream);

    > Image1.Picture.Assign(aJpeg);

    > finally

    > aJpeg.Free;

    > end;

    > finally

    > FreeMem(Buffer, MemSize);

    > end;

    >

    > end;

    >