BitBltなどで取得した画像をTBitmapに渡し、どれくらいのメモリを使っているのか知ろうとSizeofを使ったのですが、詳細なサイズが出ていないような気がします。
ちなみに最も小さいサイズにしたいと思っていたのでTBitmapからTJPEGImageにコピーしたり、そのTJPEGImageを圧縮して同じくSizeofでサイズを取得すると最初にTBitmapに渡したサイズと同じになります。
CompressionQualityのヘルプを見ると、jpeg イメージを書き出すときの圧縮となっているのでメモリ上でのやりとりをする時のサイズは画質などを落としても変える事はできないのでしょうか?
サイズの測り方が悪いような気もするのですが…通信の際にストリームでデータを渡す際に適度な画質と最小のサイズで渡したいと思っているのでどのようにすれば詳細なサイズがわかるか、どなたか教えてください。お願いします。
クラス型変数に対して、sizeofしても4(ポインタのサイズ)が返るだけだと思います。
JPEGの圧縮後のサイズは当たり前ですが圧縮してみなければ分からないので、
メモリストリームにSaveToStreamしてストリームのSizeプロパティをみればよいでしょう。
ありがとうございます。
sizeofでは確かに4しか返ってきませんね。
メモリストリームに保存してSizeプロパティの値を見てみましたがこの時は
全て8の値しか返ってこないのですが、何か間違っているのでしょうか?
Mem:TMemorystream;
TJPG.savetostream(Mem);
という形でサイズはMem.Sizeでやると8しか返ってきません。
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;
sizeofを外し忘れていました。
すいません。m(_ _)m ありがとうございました^^
ツイート | ![]() |