C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

CURファイルで反転色と使う方法

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■93429 / inTopicNo.1)  CURファイルで反転色と使う方法
  
□投稿者/ mono (1回)-(2019/12/11(Wed) 22:10:48)

分類:[.NET 全般] 

デフォルトのカーソルで
I マーク
+ マーク
のアイコンは、そのアイコンの下の背景色を反転した色で表示されます。

http://www.wannko.net/windows10/desktop/mouspo2.html

このページの右にあるようなカーソルです。

これを自作のCURファイルでも使いたいのですが
どのようにすれば良いですか?

CURファイルのフォーマットは分かっており、
自作プログラムで書き込めるようにはしているのですが、
どこのバイナリデータをいじれば、
反転色を使えるようになりますか?

https://ja.wikipedia.org/wiki/ICO_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)

恐らく、
上記ページの
アイコン画像データは常に2つのビットマップ、ANDビットマップとXORビットマップで構成される。ANDビットマップはピクセル毎に1ビットが対応し、背景に対してアイコン画像の各ピクセル位置が上書きされるか否かを指定している。
XORビットマップはそれを基にXOR操作で上書きする。これによって画像に透明な部分を作ることができ、同時に背景を反転させるなどの技が可能になっている。

のところが該当するのではないかと思うのですが、

https://www.setsuki.com/hsp/ext/ico.htm

このフォーマットのどこのことを指していますか?



引用返信 編集キー/
■93430 / inTopicNo.2)  Re[1]: CURファイルで反転色と使う方法
□投稿者/ 魔界の仮面弁士 (2519回)-(2019/12/12(Thu) 05:24:32)
No93429 (mono さん) に返信
> アイコン画像データは常に2つのビットマップ、ANDビットマップとXORビットマップで構成される。
(中略)
> のところが該当するのではないかと思うのですが、
> https://www.setsuki.com/hsp/ext/ico.htm
> このフォーマットのどこのことを指していますか?

そのページでいえば、一番最初の表と、一番最後の段落に相当します。
「ピクセルデータ」というのが XOR ビットマップ (icXOR) で
「マスクデータ」が AND ビットマップ (icAND) のことです。

「(背景色 AND マスク) XOR ピクセルデータ」で演算されますので、
マスクビットが 1 でピクセルデータが純黒なら、背景色そのままの色(つまり透過)となり、
マスクビットが 1 でピクセルデータが純白なら、反転色になると思います。
マスクビットが 0 の箇所は、ピクセルデータの色がそのまま出力されるでしょう。


なお、icXOR と icAND は同じ幅と高さに揃えておき、BITMAPINFOHEADER の
.icHeader.biWidth にてその幅を指定するようにします。また、
.icHeader.biHeight には、高さの2倍値を指定します。(icXOR と icAND の合計高さ)
色深度は 1bit/4bit/8bit いずれかのパレットカラーで生成します。


ビットマップそのものの仕様はこのあたり。
http://www5d.biglobe.ne.jp/~noocyte/Programming/Windows/BmpFileFormat.html

アイコンの情報はこのあたり。Vista 前の古いものですが。
https://docs.microsoft.com/en-us/previous-versions/ms997538(v=msdn.10)?WT.mc_id=DT-MVP-8907

なお 32bit カラーの場合はアルファ値を持っているため、マスクデータは使われず、
結果として反転色も使えないはずです。(その代わりに半透明カーソルが使える)

PNG 形式の .cur も、そもそもマスク自体が無く、アルファ値の透明度で
描画されるのみで、やはり反転色は使えないと思います。

最終的には、ツール等で作成したものとバイナリを比較してみてください。
https://www.petitmonte.com/labo/cursoreditor/
引用返信 編集キー/
■93473 / inTopicNo.3)  Re[2]: CURファイルで反転色と使う方法
□投稿者/ mono (2回)-(2019/12/13(Fri) 11:13:30)
ありがとうございます。

時間のある時にいろいろ試してみます。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ