メモリの詳細なサイズを知るには?

解決


イルカ  2006-07-29 14:05:24  No: 22748  IP: 192.*.*.*

BitBltなどで取得した画像をTBitmapに渡し、どれくらいのメモリを使っているのか知ろうとSizeofを使ったのですが、詳細なサイズが出ていないような気がします。
ちなみに最も小さいサイズにしたいと思っていたのでTBitmapからTJPEGImageにコピーしたり、そのTJPEGImageを圧縮して同じくSizeofでサイズを取得すると最初にTBitmapに渡したサイズと同じになります。
CompressionQualityのヘルプを見ると、jpeg イメージを書き出すときの圧縮となっているのでメモリ上でのやりとりをする時のサイズは画質などを落としても変える事はできないのでしょうか?
サイズの測り方が悪いような気もするのですが…通信の際にストリームでデータを渡す際に適度な画質と最小のサイズで渡したいと思っているのでどのようにすれば詳細なサイズがわかるか、どなたか教えてください。お願いします。

編集 削除
かみづ  2006-07-30 17:19:19  No: 22749  IP: 192.*.*.*

クラス型変数に対して、sizeofしても4(ポインタのサイズ)が返るだけだと思います。

JPEGの圧縮後のサイズは当たり前ですが圧縮してみなければ分からないので、
メモリストリームにSaveToStreamしてストリームのSizeプロパティをみればよいでしょう。

編集 削除
イルカ  2006-07-31 10:12:12  No: 22750  IP: 192.*.*.*

ありがとうございます。
sizeofでは確かに4しか返ってきませんね。

メモリストリームに保存してSizeプロパティの値を見てみましたがこの時は
全て8の値しか返ってこないのですが、何か間違っているのでしょうか?
Mem:TMemorystream;
TJPG.savetostream(Mem);
という形でサイズはMem.Sizeでやると8しか返ってきません。

編集 削除
さど  URL  2006-07-31 22:53:04  No: 22751  IP: 192.*.*.*

Filesize 113,842 の Test.jpg の場合、
下記例にて、サイズ 113,842 が得られます。

procedure TForm1.Button1Click(Sender: TObject);
var
  Jpg: TJpegImage;
  MS: TMemoryStream;
begin
  MS  := TMemoryStream.Create;
  Jpg := TJpegImage.Create;
  try
    Jpg.LoadFromFile('Test.jpg');
    Jpg.SaveToStream(MS);
    Showmessage(IntToStr(MS.Size));
  finally
    Jpg.Free;
    MS.Free;
  end;
end;

編集 削除
イルカ  2006-08-01 18:22:04  No: 22752  IP: 192.*.*.*

sizeofを外し忘れていました。
すいません。m(_ _)m  ありがとうございました^^

編集 削除