Irfan View @ window7 64bit


画像ビューわーのIrfanViewWindows7 64bit環境ではMicrosoft Office IME 2007と相性が悪いらしく、普通にやっても起動せず。
日本語入力システムをMicrosoft IMEに直すと起動するようになる。


で、起動できたら設定>ツールバーでスキンをdefaultにすればMOIME2007でもきちんと起動するようになる、とのこと。


めもめも。

ImageMagickとMagick++ってなんだ?

プログラムで画像を扱う際使えるライブラリ(?)として、Magick++を導入。単に先輩のプログラム動かすためなんだけどね。

http://d.hatena.ne.jp/matataki/20070129/p1

大変参考になりました。こういうのがないと未だにインストールもできないなあ。慣れてる人にはおむつを替える程度の作業なんだろうが。うぅむ。
しかしMagick++、OpenCVと比べてどうなんだろう


こちらチュートリアル
http://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf


3Dのテレビとか映画ははやるんでしょうかね。たぶんエロ系でも試されるんでしょうが、立体感は人間に残された想像力の最後の砦だと思うんですが、どうでしょう。
あとは・・・力覚?

ユニコード環境でのCStringその他(書きかけです)


ダイアログの見栄えが良いという理由で始めたユニコード環境でのMFCアプリケーション。今はちょっと後悔しております。見てくれにほいほいついて行くもんじゃないですな。


というのも、素人にはwchar_t型の処理が面倒すぎる。。。特にヘビーユーズするOpenCVは全てchar型でファイルやらを突っ込むので毎回エラーを出すと。

そこで今回のメモは変換のしかた。その他いろいろ

CString → char* (unicodeの時のみ!)


良く使うので関数にしてみた。第2引数のCStringの中身が第1引数のchar*にコピーされる。(関数名はConvertと言っているが、別に元をクリアするわけじゃない。cpyのほうが正しい気がする…)


void ConvertCS2CHAR(char pchStr[], CString csStr)
{
	// CString → TCHAR*
	TCHAR	*ptcStr = new TCHAR[csStr.GetLength()+1]; 
	_tcscpy(ptcStr, csStr);

	// TCHAR → char*
	size_t wLen = 0;
	errno_t err = 0;

	// ロケール指定
	setlocale(LC_ALL, "japanese");
	
	err = wcstombs_s(&wLen, pchStr, BUFSIZ, ptcStr, _TRUNCATE);

        delete ptcStr;
}


途中TCHARに一旦変換してるけど、unicode下なのでwchar_t型と同じ。(ちなみにunicodeでなければTCHARはchar型にタイプデフされるはず。TはtempのT?)
最初はこの辺がよくわからんかったんだが、まずunicodeではCStringはwchar_t型で文字列を奥のほうに格納している。なのでそのwchar_tをまず_tcscpy()で引きずり出し、得られたwchar_tをwcstombs_s()でcharに直しているというもの。


以下を参考に。色々まとまっていて感動しました。
http://note.phyllo.net/?eid=1106043


ただこの関数、早速不具合が。。あんまり調べずにwcstombs_sの第3引数設定したら、渡したcharの要素数が小さい場合挙動が保障されない!
…〆切も近いので放置する。ただ改良は今度必ず。現状charは配列しか受け取れないし。





MFC上でiplImageを使うには。(書きかけです)


というか、OpenCVを利用するには。
参考書によればMFC上に画像を表示させるのはCImage構造体を用いるという。拡大縮小させるにはstretchbltなんぞ用いるという。oldBMPをなんでか知らんが持っておくという。


…わけわからん。


初心者には難解すぎて参考書を前にゲシュタルトするため、近道を探したところOpenCVにステキ機能があった!今回はこの機能をメモ。主に自分のために。

cvv

ちなみに。


当然達成感はMFC標準のCImageクラスを用いたほうが強かった。ピクチャボックスをはみ出すBMPRGNを用いての縁取りが成功したときはもう!
去年の俺にはわからん感動だなあ

画像上にマウスでお絵かき


MFCはじめまして(書きかけです)

MFC使う目的■

画像の前背景セグメンテーションをしたい!そのための、、、

  • ファイル入出力をGUI化したい。連番とかも。
  • パラメータ入力も同上
  • 読み込んだ画像上にお絵かきしたい(前/背景を指定したい)

で、もう静止画の実装は終わったんだけど、動画仕様に書き直すついでにメモ。
最近記憶が薄れるのが早くて困るので、メモ書きが大切になってきた。。だからこういう場(はてなね)にアウトソースしようとするんだけど、いかんせん慣れなくてもっかい困る。どこに書いたかを忘れるし笑。コントローラもセットで欲しすなあ。せとー

  • 以下MFCアプリケーション、ダイアログベース

コントロール

デフォルト"OK"

デフォルトのOKボタンが削除しても有効で(?)、実行中エディットボックス内で押したEnterに反応して終了する。
防ぐには、OKボタンをダブルクリックしてハンドラ関数出して、OnOK()をコメントアウトする。

void CVideoSnapcutMFCDlg::OnBnClickedOk()
{
 // TODO: ここにコントロール通知ハンドラ コードを追加します。
 //OnOK();   ←ここをコメントアウト
}


で、これする前にOKボタン消しちゃったときはどうするのかという質問には笑顔を返す!


「リソースの追加」で作った新ダイアログの表示の不具合

諸般の事情(mainのダイアログにエディットボックス置きたくない)によりパラメータ入力用のダイアログを別に作ることにしたんだが、頑張って作ってDoModal()したらこんなのが↓


原因は新しくダイアログのクラスを作る時(作成したダイアログボックス上でダブルクリック)、基本クラスのデフォルトがCDHtmlDialogになっていること。
CDialogに直すときれいになる↓



これに気付くのに1時間。
またつまらんことに時間をつかってしまった・・・


フォルダ選択ダイアログ

MFCのクラスには「名前を付けて保存」みたいな時に出てくるファイルダイアログはクラス化されているが、フォルダダイアログはない。(らしい。)
そこでshlobj.h内のAPIを使うとよい。以下を参考に。
http://www.ne.jp/asahi/yamashita/programming/tips/1.html
ソースコードをコピペしてエラーが出なかったのは初めてです。ほんとにありがとうございました。


ちなみにpszDisplayNameは定義を辿るとwchar型。(俺がプログラムをワイド文字で書いてるから?)


「フォルダの新規作成」を追加したい場合はbInfoの変数を以下の通り変更

//bInfo.ulFlags = BIF_RETURNONLYFSDIRS;
bInfo.ulFlags = BIF_NEWDIALOGSTYLE;        // ←こうする。


ただこうするとフォルダのビジュアルがちょっと変わる??
(参考)http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200205/02050134.txt


ulFlagsの中身については以下を参考に。
http://www10.ocn.ne.jp/~shiimori/mfc/mfc04.htm


BIF_RETURNONLYFSDIRSは便利なので結局戻しておいた。

bInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;

連番ファイルの作り方■

先輩の何千行に及ぶソースコードから見っけてきてあぷらい。

ostringstream ostrImg;
ostrImg << setw(nFrameDigit) << setfill('0') << nFrame << "." << IMG_EXTENSION << '\0';


IMG_EXTENSIONは拡張子、nFrameDigitは桁数。


はじめはCStringの.Formatとか、sprintfの%dのオプションで桁数を決められるかと思ったんだが、状況によって連番桁数は変わるので、可変にしたかった。ので、setfill使用。


char*に直すには、

ostringstream ossStr;
ossStr << 〜〜〜;

char pchStr[];
strcpy(pchStr, ossStr.str().c_str() );


unicode環境下でMFCプログラミングしても、ostringstreamに格納される文字列はchar型。MFCのクラスじゃないからか(?)。

キー入力取得

PreTrancelateとOnChar

GetKeyState

画像の表示■

次の日記に。

画像上にお絵かき

同上

しょうもないミス

急にあるダイアログ上のコントロールに対し変数の追加が行えない

ダイアログのIDを変えたためと判明。ID名を元に戻すか、ダイアログのclassの宣言内のダイアログデータを直す。
まぁエラーが出るからすぐわかる。

「コード要素'xxxx'が読み取り専用であるため、追加と削除操作は実行できません。」

開いているxxxx関連のファイルを閉じるか、"プロジェクト名.ncb"を一回削除
http://plaza.rakuten.co.jp/dolphin3/diary/200612010000/
ありがとうございます。




Shawn






つくつくぼーし,つくづく奉仕,中.

ひと段落したので今月下旬に控えるイベントまでにすること

  • イベント
    • シナリオを考える
    • 考証をお願いする
    • googlemapでいけるのか?
    • 中身作り
    • 3Dの件連絡
  • TA
    • 3dsMaxのインストール,データの確認,打ち合わせ
  • けんきゅ
    • グラフカット整理⇒MFC
    • どーやって影落とすかなー
    • おぷ風呂かっと
  • わたくしごと
    • PC自作
    • ノートPC買うのは来年!と決意する
    • ほか


しかしまぁ,何かやりたいが何かやろうぜに代わり,何かやらなきゃに取って代るまでにそう時間はかからなかった…今回も.とは言えこの1ヶ月半に限っては,ひとつ目とふたつ目のはざまのやらかい場所を,有無も言えずに奪われた点を慰めとしたい.


あー,就職活動もしないとな…ファッキンニートくらいわかるよ馬鹿野郎っ