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;