none
Icon.ExtractAssociatedIcon() の関係、およびListViewでのImage表示について RRS feed

  • 質問

  • Icon.ExtractAssociatedIcon()、およびListViewでのImage表示に
    ついてお尋ねします。

    1. Icon.ExtractAssociatedIcon(filePath) として filePath にあたる
      ファイルのアイコンを取得する方法がHelpに述べられていて
      (.NET Framework 2.0)これを利用してみました。

      この場合、File ではなく、Folder のアイコンを知る方法はある
      でしょうか。それとも、Folderのアイコンは、別途自分でbitmap
      イメージファイルをリソースに取り込んでおき、それを順次適合する
      ファイルに適用していく方法以外にないでしょうか

    2.Explorer では、LargeIcon 表示でも、SmallIcon 表示でも
      どちらも美しいファイルIconが表示されますが、ListViewコントロール
      を使って、例えばファイルのアイコンをSmallImageListプロパティの
      16*16のモードで表示しますと、どうもアイコンイメージの画像の品質
      が劣化してぼやけてしまうように見えます。(この問題はVB6.0で
      ListViewを利用したときも同様でした)

      これは何かのプロパティの設定が不足しているか不正なためで
      しょうか、それとも、縮小のアルゴリズムが異なるためでしょうか?

      もしくは、WindowsのExplorerではSmallアイコンとして特別に別途
      のImageファイルを用意しているためでしょうか?

    なにとぞよろしくお願いします。
      

    2007年1月2日 11:58

すべての返信

  • その後またいろいろやってみたのですが、その結果を続記
    します。

    1.につきましては、まだ調べていませんでした。

    2.については、
    http://www.atmarkit.co.jp/fdotnet/dotnettips/280getappicon/getappicon.html
    などに示されている方法等を試し、Win32APIによるSmallIcon
    を取得し、それをListViewのSmallImageListに割り当てて見ま
    した。

    その結果、Explorerで表示されるアイコンと「同じもの」が得られる
    ことがわかりました。Icon.ExtractAssociatedIcon()で得られる
    ものは32*32のサイズのもので、それを16*16に縮小してもSmallIcon
    には一致しないということのようでした(この辺は今後たぶん
    バージョンアップで機能追加されるのでしょう)。

    ただ画質に関しては、それでもまだ「アイコンの画質は劣化する」
    ようでした。

    その後、
            ListView.SmallImageList.TransparentColor = Color.White
            ListView.SmallImageList.ColorDepth = ColorDepth.Depth32Bit
            ListView.SmallImageList.ImageSize = New Size(16, 16)
    などのプロパティをいろいろと変更してみましたが、やはり画質の
    劣化は回避できないように思われました。

    SmallIconの画質を劣化させない仕方をご存知でしたら教えて
    戴ければありがたく存じます。何卒よろしくお願い致します。

     

    2007年1月11日 2:02
  • >画質に関しては、それでもまだ「アイコンの画質は劣化する」

    この件についてですが、どうもOSによる違いがありそうでした。

    これまでずっとWindows2000Proにて開発してきましたが、
    これをノートPCのWindowsXpProにおいて実行してみると、
    同じSmallIconであるのに、一切アイコンの画像はぼやける
    ことなく品質の劣化はありませんでした。

    従来からのデスクトップPCとノートPCでは解像度は違いが
    ありましたが、Explorerではどちらでもはっきりと表示される
    のでそれが影響しているのではないと思います。

    どうして Windows2000 と WindowsXpとで VB2005やVB6.0
    アプリケーションでSmallIconの表示が異なるのか不明なの
    ですが、情報をご存知の方がおられましたらご指導を頂けまし
    たら大変ありがたく存じます。

    何卒よろしくお願いします。

    2007年1月14日 2:53
  • 前記しておりました、SmallIconの画質劣化の理由がわかりました!

    こちらで情報がいただけませんでしたので、他のBBSでもお聞きして
    いました。結果の次第は、

    http://pc10.2ch.net/test/read.cgi/tech/1167788121/202-213

    にある通りですが、WindowsVista にすでに変更されていた方からの
    情報で調べてみましたところ、「タイトルバーのサイズが大きい場合に
    出る現象」ということで、全く同じ現象だとわかりました。

    ------
    >悩んで調べまくった結果、ウインドウのキャプションのサイズ依存ってことが判明。
    (WindowsVistaで現象が出た方)

    今、おっしゃって下さった内容を調べてみましたところ、こちらの件も原因は同じく
    それのようでした!!

    アクティブタイトルバーのサイズを調べましたら、Windows2000のPCでは21と
    なっていて、これを最小値らしい18まで下げましたら、VS2005アプリケーション
    でもにじみが消えました。

    VS2005のスタートページのにじみはサイズが大きいせかそのままでしたが、
    それでもExplorerではタイトルバーのサイズが変わっても同じく画質は変化
    ありませんでした。

    一方のXpでは、実際タイトルバーサイズがもともと18になっていて、このせいで
    画質が良かったのかと思い、一応これを21まで上げてみたところ、このXpでは
    SmallIconの画質は劣化しませんでした。同じくそのExplorerでも変化なく画質は
    良好、さらにVS2005のスタートページでのSmallIconも良好のまま(こちらはサイズ
    がExplorerと同じでしたので変化なくて当然なのかもしれないですが)でした。
    --------

    もし WindowsVista でも Windows2000 と同じ状況であった場合は、
    同じ現象が将来 WindowsVista で出るということになるかもしれませんが、
    実際はどうなのでしょう?できれば WindowsXpPro と同じようにしておいて
    戴ければとは思われました。

    2007年1月17日 14:47
  • 追記ですが、あっちからの引用が抜けましたので下記します。

    ------
    ということは、

     ・ Explorer では、タイトルバーのサイズが変わっても影響しないようになって
       いる(OSによらず)

     ・ 一方.NETでは、同じ .NET Framework 2.0 でも、、
       SmallIconの表示に関しては、
       WindowsXpPro ではアイコンの表示がExplorerと同じ方式が取られているが
       Windows2000 では別の方式で表示されている

    ということなのかもしれません。
    ------

    もしWindowsVistaで試された方がほかにおられましたら、結果等を
    掲載してくだされば参考にさせていただきます。
    よろしければお願い致します。

    2007年1月17日 14:55