Delphi2010でTWICImageを使用してRAW画像の表示をする場合、
RAW Codecがインストールされているかどうかの確認はできるのでしょうか?
可能であれば一覧を取得してCodecの情報からファイルマスク等を
取り出したいのですが・・・
ご存じの方がいらっしゃいましたらご教示願います。
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
jazzinさん 詳細なコードの提示ありがとうございます。
無事解決できました。
会社の休憩時間でjazzinさんの参考にしたサイトをこちらでも
見つけていたので帰ったら試そうと思っていたところに
完全に動作するコードの提示をいただけたので大変助かりました。
ありがとうございました。
ツイート | ![]() |