저는 아래와 같이 하여 해결 하였습니다...
도움이 되셨길 바랍니다.
procedure Tform_SystCompany01.proc_Product_Select_to_Image_Display(wk_Code : String);
var
tmpStream1 : TStream;
tmpImg1 : TGraphic;
strSignType : String;
begin
WITH ADOQuery Do
Begin
Close;
Sql.clear;
Sql.Add('SELECT ');
Sql.Add(' COMPANY_SIGN ');
Sql.Add(' ,SIGN_TYPE ');
Sql.Add(' FROM SYST_COMPANY_MAST ');
Sql.Add(' WHERE COMPANY_CODE = ' + wk_Code );
if User_Execute_Try(1,'S',gb_ProgramName) = False then
Begin
ADOQuery.Close;
Exit;
End;
if ADOQuery.RecordCount = 0 then
Begin
ADOQuery.Close;
MoonArtMain.StatusBar1.Panels[0].Text :='조회할 자료가 없습니다.!!!';
exit;
End;
if FieldByName('SIGN_TYPE').AsString <> '' then
begin
strSignType := FieldByName('SIGN_TYPE').AsString;
if strSignType = 'jpg' then
tmpImg1 := TJPEGImage.Create
else
if strSignType = 'png' then
tmpImg1 := TPngImage.Create
else
if strSignType = 'gif' then
tmpImg1 := TGIFImage.Create
else
if strSignType = 'bmp' then
tmpImg1 := TBitmap.Create;
tmpStream1 := CreateBlobStream(FieldByName('COMPANY_SIGN'),bmRead);
tmpImg1.LoadFromStream(tmpStream1);
if tmpStream1.Size > 0 then
Self.Image1.Picture.Assign(tmpImg1)
else
Self.Image1.Picture := nil;
end;
End;
ADOQuery.Close;
tmpImg1.Free;
tmpStream1.Free;
End;
루도라 님이 쓰신 글 :
: blob 데이타가 어떤 이미지 포멧인지 알고 있다면..
:
: procedure LoadGraphic(Image: TImage; Stream: TStream; GraphicClass: TGraphicClass);
: begin
: Image.Graphic:= GraphicClass.Create;
: Image.Graphic.LoadFromStream(Stream);
: end;
:
: ...
:
: BStream := query1.CreateBlobStream(query1.FieldByname('photo'),bmRead);
:
: //a_image := BStream; -> 이 부분을 어떻게 처리해야 하는 지 모르겠습니다.
: LoadGraphic(a_image, BStream, TBitmap { or TJPEGImage });
:
: 위처럼 GraphicClass 를 지정해서 생성한 후 LoadFromStream 으로 데이타를 로딩하면 됩니다.
:
: 쩌그노트 님이 쓰신 글 :
: : 오라클 blob 이미지를 읽어서 함수에 태워 원하는 결과값을 얻어내는 로직을 구현하는데
: : 이미지 관련 형식을 잘 몰라 질문 드립니다.
: :
: : //기존 소스
: : procedure TMainForm.buttonClick(Sender: TObject);
: : var i, iErr : integer;
: : a_image, b_image : TImage;
: : begin
: : //해당 폴더의 이미지를 flist_box에 뿌려준다.
: : flist_box.ApplyPath(cxFolder.Text);
: :
: : for i := 1 to fListBox.Items.Count do
: : begin
: : a_image := TImage.Create(Self);
: : b_image := TImage.Create(Self);
: :
: : a_image.Picture.LoadFile(fListBox.Items[i-1]);
: :
: : //리스트박스의 이미지파일을 순차적으로 함수에 태운다.
: : //함수의 형식은 정해져 있기 때문에 수정불가함.
: : iErr := g_ImageLib.GetCropImage(a_image, b_image);
: : end;
: : a_image.Free;
: : b_image.Free;
: : end;
: :
: : -> 수정 사항. 폴더의 이미지를 선택하는 게 아니라 오라클 DB의 Blob 이미지를 불러 와야 함.
: : procedure TMainForm.buttonClick(Sender: TObject);
: : var i, iErr : integer;
: : a_image, b_image : TImage;
: : BStream : TStream;
: : begin
: : with Query1 do
: : begin
: : close;
: : sql.clear;
: : sql.add(' select photo from test ');
: : sql.add(' where photo_no = '1234' ');
: : open;
: : end;
: :
: : for i := 1 to query1.recordcount do
: : begin
: : a_image := TImage.Create(Self);
: : b_image := TImage.Create(Self);
: :
: : BStream := query1.CreateBlobStream(query1.FieldByname('photo'),bmRead);
: :
: : a_image := BStream; -> 이 부분을 어떻게 처리해야 하는 지 모르겠습니다.
: : 데이타 형식을 맞춰야 할 거 같은데 가능 한지요?
: :
: : //리스트박스의 이미지파일을 순차적으로 함수에 태운다.
: : //함수의 형식은 정해져 있기 때문에 수정불가함.
: : iErr := g_ImageLib.GetCropImage(a_image, b_image);
: : end;
: : a_image.Free;
: : b_image.Free;
: : end;
: :
: : inttostr처럼 TStream -> TImage으로 형식을 맞추는 작업이 아예 불가능한지,
: : 아니면 다른 방법이 있는 건지 조언을 해주시면 감사하겠습니다.
: :
|