7月 222014
 

そのうちまとめるつもり。

  • .NETのカラマネ対応APIは、System.Windows.Media, System.Windows.Media.Imagingの中にちょっとだけある。ほぼWPF専用なのではないかという予感…
    クラス / 構造体 概要
    ColorConvertedBitmap WICで一度だけ色変換できるBitmapSource。微妙MarkupExtensionもあるよ。
    ColorContext ICCプロファイル的なやつ。
    Color sRGB/scRGBカラーを扱う。挙動が微妙なこともあり、カラマネ的には役に立たない可能性が。
    BitmapFrameと各種Encoder/Decoder 画像ファイルを取り扱うクラス群。画像プロファイルも読み書きしてくれるっぽい。中身はWICの模様。

  • 内部的にはICM / WCS, WICを利用している。
    • System.Windows.MediaがICMに対応して、System.Windows.Media.ImagingがWICに対応するイメージなのかな?
  • いずれの場合もTransformは使い捨ててるので、パフォーマンスは微妙。
    • WCSプロファイルはTransform生成がかなり遅い(iccの30倍位)ため、非常に残念な事になる。回避するには多分P/Invokeしかない。
  • 残念なことにデバイスプロファイル等、PC/ユーザーに設定されているプロファイルを取得する方法は用意されていないので、ファイルパスを指定するかP/Invokeするしかない。

System.Windows.Media.Imaging.ColorConvertedBitmap

  • 変換元、変換先のColorContextと、変換したいBitmapSourceを指定して色変換できる。
  • これ自身がBitmapSourceを継承してるので、Image.Sourceとかに指定できる。
  • 一度初期化したら変更できない。
  • 内部的にはIWICColorTransformを使ってる。
  • ColorConvertedBitmap のマークアップ拡張機能なんてのもあるが、各プロパティ指定できるの一度きりだし、果てしなく微妙。

System.Windows.Media.ColorContext

  • イメージ的にはICCプロファイルとかと同じ。
  • 内部的にはColorContextHelperを通してICMのOpenColorProfile()GetColorProfileHeader()を利用している。
  • PixelFormatを指定して初期化することでsRGBとかscRGBのColorContextを取得できることになっているが、実際に取得されるのは コントロールパネル>色の管理>詳細設定>デバイスプロファイル に設定されているプロファイルだったり。
    • これはICMのGetStandardColorSpaceProfile()を利用しているからで、sRGBのプロファイルIDを指定しているにもかかわらず上記のような結果になるという謎挙動が原因である。
    • 既定のデバイスプロファイルではなく、ちゃんとsRGBを指定したいならば、自分でURIを指定する必要がある。

System.Windows.Media.Color

  • 一見RGBを抽象化したものに見えるが、実際はsRGB/scRGBカラーを取り扱う構造体である。
  • FromValues()およびFromAValues()にてColorContextを指定できるが、これは非常にややこしいことに「指定されたColorContext」→「既定のデバイスプロファイル(大抵はsRGB)」という変換となる。
    • 最初は「指定されたColorContextのRGB」を表す型なのかと思ってたら全然違った。
    • ComputeScRgbValues()というprivate methodの中で、PixelFormats.Bgra32を用いて変換先ColorContextを初期化しており、このソースを見る限りは本当はsRGBを変換先とするつもりっぽいのだけど、上記ColorContextの謎挙動により既定のデバイスプロファイルが変換先となってしまっている。
    • この変換処理ではColorTransformというinternal classを使っている。それ使わせてくれよ…
      • ColorTransformは、ColorTransformHelperを経由してICMのCreateMultiProfileTransform()TranslateColors()をやってくれるクラス。
    • 一色変換するだけの処理にもかかわらずTransformを使い捨てしており、コスト的にも大分残念な感じになっている。何に使うんだろうこれ…

System.Windows.Media.Imaging.BitmapFrame とか

  • まだあまり試してないが、画像プロファイルの読み書きができそうで良さ気。
  • System.Windows.Media.Imagingは大体WICと同じ雰囲気っぽい?
  • 内部的には完全にWIC依存。
  • でもIWICColorTransformとかは使わせてくれない微妙な感じ…
  • BitmapFrame.Create時などにBitmapCreateOptions.IgnoreColorProfileを指定していないと、埋め込まれた画像プロファイルからsRGB (これも同様にデバイスプロファイルかも知れない) へ変換される
    • 変換されるくせに埋め込まれたプロファイルColorContexts[0]はsRGBに置き換えられず、そのままである
    • これに気付かずにColorConvertedBitmapに食わせると、二重に変換されたりして悲しい思いをする
    • BitmapCreateOptions.IgnoreColorProfileを指定した場合、元のカラースペースを保持した状態で読み込まれる
  • CMYK画像をBitmapFrame.Createする際にBitmapCreateOptions.PreservePixelFormatを指定していない場合も、RGB PixelFormatへ自動変換される
    • 同様に、プロファイルが埋め込まれていた場合ColorContexts[0]はCMYKプロファイルのままである
  • BitmapCacheOption.None以外で読み込んだ場合、その時に指定されたBitmapCreateOptionsで画像がキャッシュされ、再読込時のBitmapCreateOptionsは無視される
    • Streamから読み込む場合はキャッシュの影響は受けないようだが、即時読込するためにはBitmapCacheOption.OnLoadが必要な点に注意

モニタプロファイルの取得

  • .NET じゃ無理ぽ
  • EnumDisplayMonitors()GetMonitorInfo()MONITORINFOEX取得
    →取得したデバイス名からCreateDC()でデバイスコンテキスト取得
    GetICMProfile()でプロファイルパス取得
  • 実コードとかはそのうち…
5月 272014
 

窓掴んで揺らすと、他が全部最小化するやつ。
誤爆するとウザいので…

参考:Windows aero shake – Microsoft Community

グループポリシエディタが使える場合
  1. gpedit.msc 実行
  2. ユーザーの構成管理用テンプレートデスクトップ を開く
  3. Aero Shake のウィンドウ最小化のマウス ジェスチャをオフにする を有効化
グループポリシエディタが使えない場合
  1. regedit 実行
  2. HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer を開く
  3. NoWindowMinimizingShortcuts (REG_DWORD) を 1 にする
12月 182013
 

Windows が画面の端を正確に検出できるようにするために、調整点をタッチするときには画面の少し中央寄りをタッチするようにしてください。

調整の意味ない!!
Win7時代からの機能のようなので、Win8との整合性低いんですかねぇ…

7月 112013
 

同じコピー元ディレクトリにexamplefilename.txtexampl~1.txtというファイルがある場合、コピー先で同一視されて上書きとなり、いずれかのファイルがコピーされないという問題。

8.3形式を無効にすることで回避可能。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation1にすれば無効となる。

6月 282013
 

環境:Windows Server 2003 Standard SP2

vmdkをNASからコピーしてる時に発生。
以下を試したら直った。

いずれも巨大な/大量のファイルを扱う(コピーなど)ときに出るものです。
コピー先の場合は前者、コピー元の場合は後者が出てきます。
関連ドキュメントは:

http://support.microsoft.com/KB/304101
http://support.microsoft.com/KB/312362

など、いくつか存在していますが、効果があるのは下記でしょう。

http://support.microsoft.com/KB/285089

6月 142013
 
現象
  • Windows Server 2003 R2 SP2
  • 起動中に「システム スタートアップの最中、少なくとも1つのサービスまたはドライバにエラーが発生しました。」というエラー
  • イベントビューアには以下のエラー
    • ソース: Service Control Manager
    • イベントID: 7000
    • 説明: パラレル ポート ドライバ サービスは次のエラーのため開始出来ませんでした:
      指定されたサービスは無効であるか、または有効なデバイスが関連付けられていないため、開始出来ません。
原因

パラレル ポート (Parport) サービスが有効になっているが、パラレル ポートが接続されていない場合に発生することがあります

参照:パラレル ポートを搭載していない Windows Vista ベースまたは Windows Server 2008 ベースのコンピュータでエラー メッセージ "パラレル ポート ドライバ サービスは開始できませんでした" が表示される

回避策

上記URLの通り、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Parport\Start3に変更し、Parport サービスを無効にする事で回避可能

6月 142013
 

メモリ要求が行われず、スタートアップRAMのままの容量となってしまう。

Hotfixが提供されている。

参考:Hyper-V の動的メモリ構成ガイド