掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DLLでBmpのサイズとピクセル列を引き渡すには? (ID:8663)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
本当は TBitmap のインスタンスを DLL と EXE の間でやりとりできれば いいんですけど、それができませんね。しかし、TBitmap には SaveToStream と LoadFromStream メソッドがありますので、TMemoryStream のインスタンスを仲立ちにして、メモリーイメージそのものをやりとり できます。DLL にするのは面倒なので、ユニットファイルでテストしました。 unit Unit2; interface uses SysUtils, Classes, Graphics, Jpeg; function JpgToBmp(FileName:PChar;var pImage:pointer):integer; implementation var ms:TMemoryStream; function JpgToBmp(FileName:PChar;var pImage:pointer):integer; var jpg:TJpegImage; bmp:TBitmap; begin jpg := TJpegImage.Create; bmp := TBitmap.Create; try jpg.LoadFromFile(FileName); bmp.Assign(jpg); ms.Position := 0; bmp.SaveToStream(ms); result := ms.Size; pImage := ms.Memory; finally jpg.Free; bmp.Free; end; end; initialization ms := TMemoryStream.Create; finalization ms.Free; end. これを DLL にみたてて、呼び出すのは以下のようにします。 uses Unit2; procedure TForm1.Button1Click(Sender: TObject); var Size:integer; bmp:TBitmap; mst:TMemoryStream; pImage:pointer; begin bmp := TBitmap.Create; mst := TMemoryStream.Create; try Size := JpgToBmp('C:\Test.jpg',pImage); mst.SetSize(Size); mst.Position := 0; mst.Write(pImage^,Size); mst.Position := 0; bmp.LoadFromStream(mst); Canvas.Draw(10,10,bmp); finally bmp.Free; mst.Free; end; end; うまくいくようです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.