Q&A

  • BLOB 32K로 제한있는가?
ORACLE을 사용하였고 DATATYPE은 LONG RAW 입니다...

아래 두개의 평션을 사용하여 그림파일(JPG, GIF, BMP)를 DB에저장하고 불러오게

만들었는데 이상하게 32K를 넘어가면 그림이 깨지는 현상이 발생합니다...

bde의 Oracle에 blob의 크기도 변경하여 보았는데 쩝 왜 여전히 Image가 짤리는지

증말 답답하네요 폼이 열릴때 Query도 열리는 데 이때는 제대로 나오다가

어떤 버튼의 Click이벤트에서 Query.Close; Query.Open;하면 이미지가 깨지는데 왜이런현상이 나타날까요...

고수님들의 답변 부탁드립니다...



//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

// pImage1에 있는 JPG이미지 데이터를 PGrField에 어싸인한다...

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Procedure JpgToGraphicField(pImage1: TImage; pGrField: TBlobField;

sFileName: String);

var

JPG: TJpegImage;

JPGStream: TMemoryStream;

s_Ext: String;

i_pos, i_width: Integer;

Begin

//=-=-=>> 파일명중 확장자만 검출

i_pos := pos('.', sFileName);

if i_pos <= 0 Then Exit;

i_width := Length(sFileName) - i_pos;

inc(i_pos);

s_Ext := Copy(sFileName, i_pos, i_width);

s_Ext := LowerCase(s_Ext);

//=-=-=>> 파일명중 확장자만 검출



pImage1.Picture.Bitmap := nil;

JPGStream := TMemoryStream.Create;

pImage1.Picture.LoadFromFile(sFileName);

if Lowercase(s_Ext) = 'bmp' Then Begin // bmp일 경우

JPG := TJpegImage.Create;

JPG.Assign(pImage1.Picture.bitmap);

JPG.SaveToStream(JPGStream);

pGrField.LoadFromStream(JPGStream);

JPG.Free;

End

else // gif, jpg일 경우

pImage1.Picture.Graphic.SaveToStream(JPGStream);

pGrField.LoadFromStream(JPGStream);

JPGStream.Free;

End;



//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

// PGrField에 있는 내용을 pImage1에 어싸인한다...

//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

procedure GraphicFieldToJpg(pImage1: TImage; pGrField: TBlobField);

var

JPGStream: TMemoryStream;

JpgImage : TJPEGImage;

gifImage : TGIFIMAGE;

s_Ext: String;

begin

if pGrField.IsNull Then Begin

pImage1.Picture.Graphic := nil;

Exit;

End;

s_Ext := Copy(pGrField.AsString, 1, 3);

s_Ext := LowerCase(s_Ext);

JPGStream := TMemoryStream.Create;

pGrField.SaveToStream(JPGStream);

if Lowercase(s_Ext) = 'gif' Then Begin

gifImage := TGifImage.Create;

gifImage.Assign(pImage1.Picture.Bitmap);

JPGStream.Position := 0;

gifImage.LoadFromStream(JPGStream);

pImage1.Picture.Graphic := gifImage as TGIFIMAGE; // Type Casting 방법 2

gifImage.Free;

End

else Begin

JpgImage := TJPEGImage.Create;

JPGImage.Assign(pImage1.Picture.Bitmap);

JPGStream.Position := 0;

jpgImage.LoadFromStream(JPGStream);

pImage1.Picture.Graphic := jpgImage as TJPEGIMAGE; // Type Casting 방법 2

JpgImage.Free;

End;

JPGStream.Free;

end;

0  COMMENTS