■プロフィール

うなちょ

Author:うなちょ
うなちょのほんわか日記へようこそ

RagnarokOnlineと、PC版Minecraft++Forge+MODで
遊びつつ、片手間でWindowsのソフト作って遊んでます

■最近の記事
■最近のコメント
■最近のトラックバック

■月別アーカイブ
■カテゴリー

■リンク
■RSSフィード
■ブログ内検索

うなちょホットライン

うなちょへ直接連絡したい場合は、こちらから。
うなちょのPCメールへ着信するので、比較的
レスポンス早いかも…?(5分周期でチェック中)
※E-Mailですので、メルアドがある方のみです
※うなちょの携帯に転送する方法は、直接聞いて
  くだし。
無料アクセス解析
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | --:--:--

たまーには更新してみようかな?
久々に更新してみる。

・・・と言っても、ROは最近ラグが酷くてテンション落ちまくってるので、ネタとしてはMFCとかになっちゃうね。


【MFC】PlgBlt()で画像の回転をしてみた

 職場で手の空いたときに実験してみた。

 PlgBlt()は、元となる四角形の画像の左上と、これに隣接する右上、左下の3点を指定(4点目は平行四辺形として
 自動的に計算される)すると、回転できますよ、という画像転送API。
 この3点の指定は座標で指定します。

 こいつを使って面白いなぁと思ったのは、回転する角度で処理時間が変わるという所でしょうか。
 90度のエリア(0,90,180,270)は早いとか、ある象限は多少早いとかあるみたいです。
 また、当然ながら、でかい画像を回転させると、時間が掛かります。
 (試してみたところ、1600x1200の画像を回転させると、大体200ミリ秒程度かかってました。元画像はDDB?
 (DirectDrawのサーフェイス)です)

 サンプルコードはインターネットのあちこちで転がっているのと、職場のソースコードは持ち出せないので、gdgdと
 文章で書いているだけなので、サンプルコードを見たい人は他を当たってくださいまし。

 まぁ、綺麗に回転、というわけにはいきませんが、とりあえず回転できればいいやーという方向けのAPIでした。



【Explorer?Aero?】やっと直った個人設定・壁紙設定 (Windows7 64Bit)

 自宅のPCはWindows7 64Bitを使ってるのですが、昨年末に突然HDDが多少ダメージを受けていまして、帰宅後
 PCを起動したら、異常に重かったんですよ。
 CHKDSKかけたら、いくつかCドライブのファイルがぶっとびました。
 イベントログみたら、前回起動の分で、1秒の間にえらい数のNTFSの警告が出てた。久々にみた。

 イベントログで調べてみたら、thumbcache.dllとthemeui.dll、そしてticft.ratという3つが壊れてました。
 ところが、themeservice.dllは無事なので、Aeroとかは動きますし、個人設定も開くのですが、壁紙候補の
 サムネイルが出てこなくなったんですよね。
 ネットを調べていたら、Windows7 64Bitのthemeui.dllはあったので入れてみたのですがだめでした。

 まぁ、壁紙設定でちょっと不便なだけだったので放置したのですが、後述のスマートフォン用壁紙変換ツールを作って
 動作検証にPictureフォルダを開いたら・・・

   (*゚ω゚)なぁなぁ、画像何かなんだかわかんねー             なんで?(゚ω゚*)
   (*゚ω゚)サムネイルでないんだわ・・・表示する設定なのに!  何かやったろ?(゚ω゚*)

 まぁ、どうやら個人設定の壁紙サムネイルが出てないのに関連しているんだろうなーと思って、再び調査を開始。
 とりあえず、上記のCHKDSKでぶっとんだ各ファイルは、幸いというかなんというか、夏にCドライブがふっとびかけた
 際に取ったバックアップフォルダにあったので、3つのファイルをコピーして復元させてthemeサービスを再起動
 したら、復活しました。

 まぁ、おそらくthumbcache.dllが無いから、サムネイルが見えなくなっていただけだとは思うのですが。

 ※そーいえば、縮小版でサムネイルを表示させているのに、thumbdbが無いとおもったら、Vista以降?でサム
  ネイルの保存方法変更になっていたんですね。
  これはこれで問題があるらしく、一定量以上たまるとサムネイルデータが壊れるのでクリーンアップの縮小表示?を
  選択して消去して作り直さないとだめとかあるらしいですが…



【手抜き】スマートフォン用壁紙変換ツール

 Twitterでつぶやいたのがこれ。
 スマートフォンの壁紙って、画面横の2倍サイズ×高さ(等倍)っていうサイズなんですよね。
 私の場合、Xperia aeroは480x854なので、960x854というサイズです。
 ※単にアプリ側で横サイズ×2倍という風に処理しているだけなので、フィーチャーフォンの横サイズの半分を
  指定してやれば、フィーチャーフォン用も作れます。

 そして、この壁紙をつくろうと思ったら、元画像が縦長か横長でどちらかに合わせてからはみ出たところを切り取る、
 という感じで拡大縮小・トリミング・ポジショニングをしなければなりませんが、いちいち画像編集ソフトを起動する
 のもめんどい。

 …という訳で、簡単に変換できるツールを作ってみた訳です。

 Explorerから画像ファイル(PNG,JPG,BMP等Windowsが標準でサポートしてるのは読めるはず)をDrag&Dropでツールに
 落とすと、リストに追加されます。
 リストを選択すると画像化しますが、基本的には画面枠内に収まる用に縮小・拡大しています。
 縦長だったら横が不足気味になりますが。

 チェックボックスで短辺を枠にあわせることもできて、これを選択すると画像が枠からはみ出ます。
 初期配置で、上/左寄せ、中央配置、下/右寄せという位置の設定も可能です。

 画像はマウス左ボタンで移動できますし、この状態からの拡大縮小はホイールで0.5%単位に変更できます。
 これらの機能を組み合わせると、簡単に変換できちゃう・・・かもしれない。
 一応自分で使って過不足はなくなったので、基本的な機能はできたかなーと。
 あとは、作成した画像の転送と壁紙設定だけど、これはスマートフォン側でがんばって設定してね!ってことで。


 今回のツールでは、拡大・縮小を綺麗にやりたい!という願望がありました。
 まぁ、PCの壁紙は、起動しているアプリを全画面で使う関係上どうでもいいのですが、スマートフォンの場合、画面
 ロック解除やホームでは壁紙が見えてしまうので、どうせなら綺麗に拡大縮小したかったのです。
 ところが、GDIのStretchBlt()の場合、SetStretchBltMode( HALFTONE )をやっても、綺麗にならない。
 なぜかHALFTONE設定が聞いていない感じがしましたが。

 インターネットを探したところ、GDI+のDrawImageを使うと綺麗にいけるよ、という記事があったので、チャレンジ
 してみました。

 GDI+を使うには初期化と後始末が必要なので、ダイアログアプリケーションで作成されるメインダイアログウィンドウ
 の生成前にStartupを、DoModal()の後にCleanupを入れました。

 そして、CImageで指定画像を読み込んでそれをテンポラリのCBitmap/CDCペアに転送し、テンポラリの
 CBitmapハンドルからGdiplus::Bitmapへ変換し、これをGraphic::DrawImageしてやったら、綺麗に拡大縮小
 ができました。いやまじで綺麗だ。
 (専門家からすりゃ大して綺麗でないかもしれないけど、普通に見る分には綺麗だよ!)

 ここでStretchBltとDrawImageの比較画像がでてくりゃ最高なんだろうけど、そんなもの作るつもりはねー!

  (*゚ω゚)手抜き?  ただ面倒くさがってるだけ(゚ω゚*)当然ジャン

 まぁ、最初は、CImageの画像をテンポラリファイルに保存して、それをImage::FromFileで読み込んで
 DrawImageで拡大縮小、なんていうことをやってたりしましたが、GDI+のヘッダ見てみたら、Bitmapって
 CBitmapから直接作れるし、Bitmap自体がImageを継承してるじゃないですか。
 だったら、DrawImageの第一パラメータ(Imageを渡す)に使えるんじゃね?と思ってBitmap::FromHBITMAP
 で画像をBitmapクラスに格納してやってみたら、動くから助かった。
 IStream経由でImage作らないといけないのか?とか思ってたので… (GlobalAllocしてうんぬんはめんd(ry )
 えらい手抜きの方法があったもんだ。

 あ、そうそう。Bitmap::FromHBITMAP()の第2パラメータのHPALETTEは、フルカラーBitmap使ってるならば
 NULLで良いみたいです。
 HPALETTEなんてCBitmapで取れないっぽかったので、やけくそぎみにNULL設定したら動いたのですよ。
 まぁ、やってみるもんですなぁ。
 ※どうしてもパレットが必要となる場合(Highカラーとかの画像)は、CBitmap::GetObjectで取得する(できた
  っけかな…?)か、24ビットBitmapを作ってそこにBitBltしてやればフルカラー画像変換できますから、
  それでGdiplus::Bitmap::FromHBITMAPすればいけると思われます。
  (意識してやってないけど、このツールではCImage→CBitmap/CDCペアへBitBlt()してるので、できるかも
   しれない?)

最近は、こんな感じですかねぇ。

(*゚ω゚)ノ そうそう、AC6のフライトタイムが432時間行ったよ!  Mission数15しかないのに飽きないねぇ(゚ω゚*)



┣【雑記】 | 23:46:52 | Trackback(0) | Comments(3)

コメント
久々に更新されていりゅ(゚∀゚)ノ

ぼくはスマホユーザーではないですが、くろいののスマホでたまに遊んでますけど壁紙を設定するとなんとも残念なことになるもんで。設定やらでなんとかならないもんかと思ったわけですが、、何ともならずに諦めた…/(。д。)\爆★
だいたいどこのメーカーでも共通なのかなぁ…
せめて背景固定になればいいのにw

2012-01-11 水 12:30:03 | URL | あぷる [編集]
音信不通じゃなくてよかった」
新年あけましておめでとうございます。

最近あんまりみかけてなかったんで 何かあったんじゃないかと心配でした。

2012-01-14 土 00:32:55 | URL | せりか [編集]
返信すら忘れる更新頻度(笑)
>あぷるーヾ(゚∀゚*)ノ
Androidならば、大体仕様は同じだと思うよ?
画面サイズが違うだけだろうから、壁紙の横サイズは画面横サイズ×2、高さは画面の高さで作ると、幸せになれるよ。
(ただし、ホーム画面で左右にスクロールできるなら、の話。スクロールできないなら、画面サイズ通りかも?)
Windows標準のペイントでも加工できなくはないから、試してみるといいかも。
(保存はJpegかPNG。Jpegお勧め。PNGは劣化させたくない場合に選択すべし)
ただし、Android標準のビューワーで見てから壁紙に指定すると、なぜか若干小さいサイズ枠がデフォルトで出てくるので、他のアプリで設定したほうがいいかもしれない。


>せりかさん
生きてるよ~ヾ(゚ω゚*)ノ
大晦日~正月にかけて宿に出没した程度ですがね~w
まぁ、お引越ししたら光にするつもりなので、そのあたりになったら完全復活するつもりではいるのですが・・・イツダロウネw
そのころには、あすか㌧も復活してれば、さらに倍かもしれない(何が)!
2012-01-18 水 20:24:04 | URL | うなちょ [編集]
コメントの投稿

管理者にだけ表示を許可する

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。