Delph2007です。
どこかにDelphiでSusieプラグイン(SPI)を使うサンプルが無いでしょうか?
いろいろ探しているんですが見つかりません。
使ったこと一度もないけど以下は参考になりますか?
http://www.vector.co.jp/soft/win95/art/se061714.html?site=n
お?さん。そこは見たのですが、dcuしか提供されてなくてDel4までの対応ですので無理かな・・・と。
いろいろ検索しまくってやっと見つけました。
以下サンプルを作りましたので、もし参考になれば・・・
-------------
implementationの前に
function GetPicture(buf:PChar; len:longint; flag:Cardinal;
pHBInfo:PHandle; pHBm:PHandle; lpProgressCallback:Pointer;
lData:longint):Integer; stdcall; external 'IFJPEGX.SPI';
//IFJPEGX.SPIは高速JPEGプラグイン
procedure JPEG_Load(fname : AnsiString ; Bmp : TBitmap);
var
hBm,hBmInfo:THandle;
pBm:Pointer;
pBmInfo:PBitmapInfo;
Width, Height: Integer;
line :Integer;
begin
GetPicture(PChar(fname), 0, 0, @hBmInfo, @hBm, nil, 0);
pBm := LocalLock(hBm);
pBmInfo := LocalLock(hBmInfo);
Width := pBmInfo^.bmiHeader.biWidth;
Height := pBmInfo^.bmiHeader.biHeight;
Bmp.Width := Width;
Bmp.Height := Height;
line := SetDIBits(
Bmp.Canvas.Handle,
Bmp.Handle,
0,
Height,
pBm,
pBmInfo^ ,
DIB_RGB_COLORS
);
LocalUnlock(hBm);
LocalUnlock(hBmInfo);
LocalFree(hBm);
LocalFree(hBmInfo);
end;
procedure TForm2.Button2Click(Sender: TObject);
var
Bmp: TBitmap;
I: Integer;
fname :AnsiString;
t1,t2: Cardinal;
time :Double;
begin
Bmp := TBitmap.Create;
t1 := GetTickCount;
for I := 0 to 99 do
begin
fname := Format('%.3d.jpg',[I]);
fname := 'c:\test\' +fname; //c:\test\ に 000.jpg〜099.jpg を置いておく。
JPEG_Load(fname, Bmp);
Image1.Picture.Bitmap.Assign(Bmp);
Application.ProcessMessages;
end;
t2 := GetTickCount;
time := (t2-t1)/1000.0;
label1.Caption :=FormatFloat('0.000秒' ,time);
Bmp.Free;
end;
私も長年(?)このプラグインを利用したかったのですが、
よくわからなく・・・。とても参考になりました。
ところで質問なのですが、jpg以外の形式の画像も
同時に扱いたい場合(例えばTIFFとか)、どういう
コードを書けばいいのでしょうか?
function GetPicture(buf:PChar; len:longint; flag:Cardinal;
pHBInfo:PHandle; pHBm:PHandle; lpProgressCallback:Pointer;
lData:longint):Integer; stdcall; external 'IFJPEGX.SPI';
の代わりに、
function GetPicture_JPG(〜):Integer; stdcall; external 'IFJPEGX.SPI';
function GetPicture_TIFF(〜):Integer; stdcall; external 'IFTIFF.SPI';
などと書けばいいのかと思ったのですが、GetPicture という名前は
変えてはいけないようで・・・。
うろ覚えだけど、これは?
function GetPicture_JPG(〜):Integer; stdcall; external 'IFJPEGX.SPI' name 'GetPicture';
インポートする関数名を指定することで別名にできた気がする。
ofZ様、ありがとうございました。できました。
ちょっと世界が広がったような^^
これは名前修飾とかいうものらしいですね。私が持っているDelphi本では「Delphiクイックリファレンス オーム社 2001発行」だけでした。
wikipedia
http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE
私が持っているDelphi本では「Delphiクイックリファレンス オーム社 2001発行」だけ(が解説してある本)でした。
・・です。
やたらと間違い多くてゴメンナサイ。
×Suise
○Susie
×Delph2007
○Delphi2007
今回のは名前修飾とは関係ないですね。
単に「ライブラリからの関数のインポート」ときの name 指令に過ぎません。
ヘルプに載ってますよ。
ツイート | ![]() |