DelphiでSuiseプラグインサンプル

解決


グリム堂  2008-10-16 00:15:46  No: 32215

Delph2007です。
どこかにDelphiでSusieプラグイン(SPI)を使うサンプルが無いでしょうか?
いろいろ探しているんですが見つかりません。


お?  2008-10-16 02:13:35  No: 32216

使ったこと一度もないけど以下は参考になりますか?

http://www.vector.co.jp/soft/win95/art/se061714.html?site=n


グリム堂  2008-10-16 22:58:37  No: 32217

お?さん。そこは見たのですが、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;


Manbon  2008-10-17 01:16:24  No: 32218

私も長年(?)このプラグインを利用したかったのですが、
よくわからなく・・・。とても参考になりました。

ところで質問なのですが、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 という名前は
変えてはいけないようで・・・。


ofZ  2008-10-17 02:10:13  No: 32219

うろ覚えだけど、これは?
function GetPicture_JPG(〜):Integer; stdcall; external 'IFJPEGX.SPI' name 'GetPicture';

インポートする関数名を指定することで別名にできた気がする。


Manbonは解決。  2008-10-17 18:01:55  No: 32220

ofZ様、ありがとうございました。できました。
ちょっと世界が広がったような^^


グリム堂  2008-10-17 21:40:16  No: 32221

これは名前修飾とかいうものらしいですね。私が持っているDelphi本では「Delphiクイックリファレンス オーム社 2001発行」だけでした。

wikipedia
http://ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE


グリム堂  2008-10-17 21:42:10  No: 32222

私が持っているDelphi本では「Delphiクイックリファレンス オーム社 2001発行」だけ(が解説してある本)でした。

・・です。

やたらと間違い多くてゴメンナサイ。

×Suise
○Susie

×Delph2007
○Delphi2007


うんと  2008-10-17 22:49:34  No: 32223

今回のは名前修飾とは関係ないですね。

単に「ライブラリからの関数のインポート」ときの name 指令に過ぎません。
ヘルプに載ってますよ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加