他人の空似自作物置場
.pngファイルから.curファイルを作成します
プログラム名:png2cur 用途: .pngファイルから.curファイルを作成します。 使い方: ・png2cur.exeをコマンドプロンプトから以下の7つの引数をつけて起動する。 ・対象の.pngファイルへのパス ・トリミング始点x ・トリミング始点y ・トリミング横幅 ・トリミング縦幅 ・ホットスポット(マウスカーソル設定時の指してる位置のこと)X ・ホットスポットY ・.pngと同じディレクトリに.curという名前で出力される。 ・後はマウスカーソルに設定するなどお好きにどうぞ。 ファイル解説: png2cur.exe プログラム本体 Readme.txt 今読んでいるこれ History.txt 更新履歴 png2cur.cpp ソースコード png2cur.sln ビルド用ソリューションファイル png2cur.vcsproj ビルド用プロジェクトファイル png2cur.vcxproj.filters 同上 免責事項: これに同梱されたプログラムその他が原因で発生したいかなる損害も当方は一切関知しません。 また、全てのプログラムがウイルスではないという証明も、ウイルスに感染していないという証明もありません。 自己責任でお使いください。 Q&A: Q:ダブルクリックしても何も起こらないんだけど A:本アプリはコマンドプロンプトからのみ使用できます。 コマンドプロンプトが何かわからない人は 申し訳ありませんが本アプリの使用をあきらめてください。 Q:縮小なんかおかしくね? A:独自実装のため、一般的な画像編集ソフトに比べて質が悪いです。 今時ライブラリも使わず自力実装とかありえないですが 趣味で作っているので許してください。 Q:.curの内容詳しく A:32*32と48*48の二種類を格納。 トリミングの結果正方形じゃなくなった場合は 長い方を元に正方形になるまで短い方の前後に透過ピクセルを挿入。 ピクセル情報は無圧縮。 Q:引数の意味がよくわからん A:まず始点xyから始まる縦横サイズの画像にトリミングします。 ホットスポットxyはマウスの頂点(矢印の先の部分)が 画像のどこに位置するかを指定するものです。 ホットスポットのxyはトリミング後かつリサイズ前の画像上のxyとなります。 当然ですがリサイズの結果ある程度ずれることがあります。 Q:読めない.pngがあるんだけど A:結構手抜きなのでたぶんパレットな.pngなどは読めません。 申し訳ありませんが仕様なのであきらめてください。 Q:出来た.curをVS上で編集しようとするとぐちゃぐちゃになるんだけど A:原因不明ですが仕様です。 マウス表示に設定しても特に表示が乱れたりはしないので VisualStudio上の.cur編集機能側がおかしいのではないかと思ってますが 確証はありません。 Q:その他バグをみつけた or 動作しない or 要望がある A:確認次第対応可能であれば対応します。 公開しても問題が無いメールアドレスにて 下部に記載されたアドレスまでメールをどうぞ。 メールアドレス:sweetie(あっと)click3.org ライセンス: ・本ライセンスにおいて、全ての条項は「変更の有無を問わず、明示暗示を問わず、商業慈善を問わず、 個人法人を問わず、保持使用を問わず、有料無料を問わず、全体一部を問わず、コピー派生を問わず 実行ファイルソースファイルを問わず、故意錯誤を問わず」と装飾されている物として扱う。 ・著作権者は本ソフトウェアに関する一切の保障義務をもたない。 ・上記条項唯一の例外として、本ライセンスに違反した場合を除いて著作権者から 本ソフトウェアに関する一切の法的措置を受ける事が無い事のみ保証される。 ・著作権者やその他保持者がこのライセンスの範囲で行う活動に支障が無い範囲であれば何を行っても構わない。 ・上記条項の”何を行っても構わない”には本ソフトウェアの製作者を偽っての再配布も含まれる。 ・全ての権利の行使において、著作権者への連絡、著作権者やライセンス条項の記載、 適用ライセンスなどの制限は一切存在しない。 著作権者名:sweetie 面倒な人向けライセンス解説: 作者やライセンスの記載義務すらありません。 再配布や改造など申告なし記述なしで好きにできます。 技術情報(と、どうでもいい話): 画像の縮小処理はBicubic(バイキュービック法)を使用している。 が、ググって出てきた仕組みを、理解もせずそのまま突っ込んでみただけである。 なので、ちゃんとした性能を出し切れていない可能性がある、というかたぶんそう。 当然だがトリミングは特別な何かをしているわけではなく、普通にピクセル情報を直に編集しているだけ。 トリミング処理は普通始点xyと終点xyを指定するものでは、との指摘を友人から受けたが 自分としてはこちらの方が自然だと感じたので、助言を無視して幅指定で実装している。 ちょっと調べればわかるが、.icoと.curの違いはアドレス0x02が1か2かだけなので このアプリの出力もバイナリエディタでちょっといじれば.icoとしてgimpなどに読ませることができる。 関係ないがGIMPで幅1pixelの透過を置くとなぜか塗りつぶされた.icoになる、バグかね? 縮小処理まで実装しておいてなんだが実は32*32とか48*48とか関係なくどんなサイズでもマウスカーソルに設定できる。 少なくともvista以降では行けることは確認済み。 なので、ほぼ無視できるレベルの処理軽減とかメモリー効率化のためだけに縮小処理を入れていることになる。 いや、単に完成後までその事実を気づいていなかっただけだが。 色情報の読み取りとかむっちゃ手抜き。 色情報の読み取り元も書き込み先も同じColor構造体なのに、rgbのメンバーが指す赤青緑の意味が異なる。 動いちゃったので確認していないが、たぶん書き込み先のrgbの名前と実態がちゃんと対応していない。 .curは高さをマイナスにするとピクセルの縦方向の解釈方向が逆になると資料にあったのだが 実際にマイナス指定してもwindowsさんが認識してくれなかったので、あきらめて自力で縦を逆にしている。 画像データ部分は圧縮して.pngなデータを突っ込むとか圧縮方式はいろいろ選択肢があったのだが gimpさんをはじめいろいろなところで無圧縮以外はやめとけと言われたので無難に無圧縮にしてある。 RLEとか面白そうだったんだけどね。 .cur内でいくつか省略可能なパラメーターを省略しているが、そもそも省略しても推測可能なら値を バイナリフォーマットの中に入れるというのはどうなのだろうか。 省略可能ではないが、縦横のサイズとかもし値がずれていたらどうするのだろうか? lexical_castを使ってる関係で、引数を間違えると即クラッシュする。 が、そこのエラー処理とかしんどすぎるので手を抜いているし、今後も直す予定はない。 これは元々友人が再配布禁止素材を元にした.curを疑似的に配布するために作られた。 おそらく適当に画像をDLして配置して.batをたたくと完成品が出てくる、というアーカイブを作りたかったのだろう。
2015/02/07 ver1.01 縮小処理でトリミング範囲外を完全透明色として扱うようにした 2015/02/07 ver1.00 初版リリース