여기 저기서 쏘스를 구해서
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;
청개구리 남기석( 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;
>