Q&A

  • 비트맵을 메로리 스트림으로변환시 메모리 누적현상..
안녕하세요!!

막히는 부분이 상당히 많내요!
고수님들의 많은 조언 부탁 드립니다..

연속된 비트맵을 스트림 파일로 저장을 합니다. 그런데
jpeg로 변환된 비트맵을 SavetoStream()으로 변환시 메모리 누적이
상당히 심합니다.

연속된 비트맵을 한개만 돌리면 상관없는데 2개이상 연속된 비트맵을 이미지로 변환 메모리 스트림으로 저장시 상당한 메모리 누적이 발생됩니다..

........
연속된 비트맵을 가져옴(초당 4-5개의 비트맵)
Try
  FStream := TMemoryStream.Create;
  jp  := TJpegImage.Create;
  jp.Assign(bBitmap);
  jp.CompressionQuality := 50;
  jp.Compress;

  IF Jp.Empty Then Begin
    jp.Free;
    jp := Nil;

    FStream.Free;
    FStream := Nil;

    bBitMap.Free;
    bBitMap := Nil;

    Exit;
  End;
  jp.SaveToStream(FStream); <==1 이부분을 빼고 돌리면 메모리는 변환없이 안정적으로 됩니다. 문제는 이부분을 삽입후 돌리면 메모리가 급하게 누적이 됩니다.(분당 1-3메가정도 누적이 되어 프로그램이 다운이 되더군요)
  Sleep(100); //그리고 1번부분을 삽입후 지연시간을 100정도 주면 메모리 누적 현상이
  현저하게 줄어드는데 그래도 메모리 누적현상은 변함없이 누적이 되는군요..
  Fstream.Position := 0;

  IF Assigned(FS) Then Begin  // FS: TFileStream 전역변수임
    FS.CopyFrom(FStream, FStream.Size);
    Application.ProcessMessages;
  End;

  Finally
    IF Assigned(jp) Then
      jp.Free;

    IF Assigned(FStream) Then
      FStream.Free;

    IF Assigned(bBitMap) Then
      bBitmap.Free;

  End;
0  COMMENTS