Delphi2010 WIC RAW Codec一覧の取得

解決


Sara  2010-01-26 08:31:21  No: 37267

Delphi2010でTWICImageを使用してRAW画像の表示をする場合、
RAW Codecがインストールされているかどうかの確認はできるのでしょうか?
可能であれば一覧を取得してCodecの情報からファイルマスク等を
取り出したいのですが・・・

ご存じの方がいらっしゃいましたらご教示願います。


jazzin  2010-01-26 23:58:34  No: 37268

RAW画像は扱ったことがないので外しているかもしれませんが、
以下のコードでWICがサポートしているコンポーネントを列挙できます。

uses
  ..., WinCodec, ActiveX;

procedure TForm1.Button1Click(Sender: TObject);
var
  factory: IWICImagingFactory;
  enumerator: IEnumUnknown;
  unknown: IUnknown;
  info: IWICBitmapDecoderInfo;
  clsid: TGUID;
  cnt: Cardinal;
  c: array of Char;
begin
  if Failed(CoCreateInstance(CLSID_WICImagingFactory, nil, CLSCTX_INPROC_SERVER or
        CLSCTX_LOCAL_SERVER, IUnknown, factory)) then Exit;

  if Failed(factory.CreateComponentEnumerator(
    WICDecoder,                   // WICComponentType
    WICComponentEnumerateDefault, // WICComponentEnumerateOptions
    enumerator                    // IEnumUnknown
  )) then Exit;

  while enumerator.Next(1, unknown, nil) = S_OK do
  begin
    info := unknown as IWICBitmapDecoderInfo;
    if Assigned(info) then
    begin
      info.GetFriendlyName(0, nil, cnt);
      SetLength(c, cnt);
      info.GetFriendlyName(cnt, PChar(c), cnt);
      Memo1.Lines.Add('[' + PChar(c) + ']');

      info.GetCLSID(clsid);
      Memo1.Lines.Add('GUID: ' + GUIDToString(clsid));

      info.GetFileExtensions(0, nil, cnt);
      SetLength(c, cnt);
      info.GetFileExtensions(cnt, PChar(c), cnt);
      Memo1.Lines.Add('Extensions: ' + PChar(c));
    end;
  end;
end;

今回は列挙だけなのでインスタンスを直接生成していますが、
IWICImagingFactoryはTWICImage.ImagingFactoryと同じものですので、
そちらから取得することもできます。
なお、上記コードはこちらを参考にしました。
http://msdn.microsoft.com/ja-jp/magazine/cc546571.aspx


Sara  2010-01-27 04:51:51  No: 37269

jazzinさん  詳細なコードの提示ありがとうございます。

無事解決できました。

会社の休憩時間でjazzinさんの参考にしたサイトをこちらでも
見つけていたので帰ったら試そうと思っていたところに
完全に動作するコードの提示をいただけたので大変助かりました。

ありがとうございました。


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

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






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