DBChart를 SaveToFile()를 이용해서 JPEG로 저장을 하는데요... 자꾸 다음과 같은 에러가 나타납니다.
"사용가능한 저장소가 부족하여 이 명령을 처리할 수 없습니다."
처음부터 생기는 것이 아니고 몇번하다 보면 이 에러가 생깁니다.
어떻게 해야 할까요?
아래는 소스입니다.
//DBChart를 이미지 파일로 저장하는 놈
with GetChartJPEG(createChart(tmpQuery, inspectcnt, site, 'MIME')) do
try
SaveToFile(ChangeFileExt(FullImageName, '.jpg')); <==여기서 에러가...
finally
Free;
end;
//차트를 JPEG포맷으로 변환하는 놈
Function GetChartJPEG(AChart: TCustomChart): TJPegImage;
var
tmpBitmap: TBitmap;
begin
result := TJPEGImage.Create;
tmpBitmap := TBitmap.Create;
try
tmpBitmap.Width := AChart.Width;
tmpBitmap.Height := AChart.Height;
AChart.Draw(tmpBitmap.Canvas, Rect(0,0, tmpBitmap.Width, tmpBitmap.Height));
with result do
begin
GrayScale := false;
ProgressiveEncoding := true;
CompressionQuality := 100;
PixelFormat := jf24bit;
ProgressiveDisplay := true;
Performance := jpBestQuality;
Scale := jsFullSize;
Smoothing := true;
Assign(tmpBitmap);
end
finally
tmpBitmap.Free;
end;
end;
정확한 답변이 될 지 모르겠군요.
TJPEGImage가 계속 메모리에 쌓이는 것 같군요. 즉 정확히 메모리 해제가
안되는 것 같습니다. 아래와 같이 한 번 해보세요.
메인에서는
Temp_JpegImage := TJpegImage.Create;
Temp_JpegImage := GetChartJPEG(~);
.
.
Temp_JpegImage.Free;
함수에서는
var
Temp : TJpegImage;
begin
Temp := TJpegImage.Create;
.
.
result := Temp;
Temp.Free;
end;