Category Archives: 開発 - Page 2

フォント縁取り

ある日、フォントの話をしてて、フォントの組み込みって出来ないの? ってみぐさんから言われました。
ほうほう?
と話をきいてたら、こういうフォントを使いたいなぁとか言われまして、どうやら権利的には問題ないと言うことなので、ははぁ、じゃあ組み込んでみましょうかねぇ。って返答したんですよ。

そしたら、ついでに、縁取りもしようぜ。しないといじめちゃうんだから♪ なんていわれましてね。
色々と方法を探って試してみたんですが、どうにも馬鹿正直にやるのが一番なのかなぁという結論に達して組んでみました。

実際の画像が上です。
下の赤い縁取り部分がプログラム的に追加しているところ。

赤いところを抽出する方法はこんな感じ。
1.馬鹿正直に点を8方向にずらして、ビットフラグを立てる。
2.ビットフラグを元に総和を求める。
3.総和を点の数で割る→縁のα値
4.α値を元に黒の描画
5.普通のフォントを普通に描画

なんといっても1.と2.が泥臭すぎるのと、直線なのにいきなり縁取りが一段明るくなったりするのが、どうしたらいいのかなぁというところです。
もっと数学的なところからせめて、縁を検索とかをした方がいいですかねぇと思いつつ、この程度のピクセル数なのに必要ないよねぇとかそんな感じです。

泥臭くやるにしても、数学的にでもこうやるとこんなに綺麗だぜって人は教えてくださいませ。ぜひぜひ。

と、おもったら

Feature Packがインストールできないよ。うわーんと思っていたのですが、なんかServicePack1に既に一緒にはいっていたようで、Wizard使って適当にぽちぽちしたら結構なものが出来ました。

これはいじりたくなる(*´Д`)ハァハァ

Visual C++ 2008 Feature Pack

今日、会社で暇つぶし(ぉぃ)に読んでいたCodeZineの記事でVisual C++ 2008 Feature Packなるものを紹介している記事がありました。前にVBで似たようなパッケージが出たのは知っていたのですがC++のパッケージが出ていたのには気がつきませんでした。
IDEを起動したときのニュースは欠かさずチェックはしているのですが、あれは日本語で提供されているのまでしか拾わないのかしら・・・。

それはそれとして、意外と面白い内容でちょっと興味がわきました。
あと、一番MFCが強化されたというところで、ちょっと心ワクワクという感じです。
MFCは6.0からさっぱり更新されなくて、UIを作る時にはいつも何にしようかとおもって、前回もC#をちょっといじってみるかねぇ・・・ なんてやってすっきりしない気持ちで触っていたのですが、やっぱりすっきりしないんですよねw

tr1も追加されているようですが、あんまその辺には興味がないというか、まぁ、なんか必要になったらちょっと使ってみるかー程度なんで、どうでもよかったり。生粋のC++マニアならtr1で色々と追加されてるよ、ひゃほーいなんでしょうけど、C++スキーですが、用途が無いうちに追加された機能に関してはとんとさっぱり興味が湧きません。
正規表現できるよーとか書かれても、boost::xpressiveの方が興味があったりします。

まぁ、ぼちぼちいじってなんか書こうとは思いますが、それはまた別な時に。
正直泥臭いことばかりやってるんで、記事にしようもないということばかりなんですがね!

TextureとかSurfaceのLockRectangle

そんなわけでですね。
MDXで読み込んだらすべからくMicrosoft.DirectX.Direct3D.Textureになるわけですよ。
Formあぷりけーそんなので、これを描画するには一工夫必要する必要があるわけですよ。

HDC経由でBitbltが出来るよ!(・∀・)

っていう@ITで投稿をみたので、やってみようかなぁと思ったのですが、ヘルプを眺めてたらOnPaintのPaintEventArgs.GraphicsにDrawImageすればいいんじゃね? と思いまして、Textureをこねくりまわして、System.Drawing.Imageにすればいいのねーというわけで、またまたヘルプを眺めてたら、Texture側の出来ることは非常に少ないようで、Graphicsのプロパティ経由でなんかするか、HDCとるかなんか手法が限られてきます。

なんかもっと違う手法ないかのーとあれこれ見てたら、LockRectangleすればGraphicsStreamを返してくることを発見。
中身を見てみたら、Streamが親クラス。
これは! とおもって、System.Drawing.Bitmapのコンストラクタを見たらStreamを引数なのがあるので、それをやってみるかってことで、やってみたんですよ。

GraphicsStream stream = Texture.LockRectangle();

なんて書いて、streamはきちんと帰ってくるんだけど、それをBitmapのコンストラクタに食わせると、引数不正です。ぺっと例外を吐いてくれるわけです。

なんだとー! と思って、streamの中身を見てみたら、なんかサイズが0x7fffffffなんて数字です。
明らかにおかしくて、LockRectangleの引数を変えてみても一緒。
しょうがないからTextureからSurfaceを引っ張り出して、LockRectangleをしても一緒。

えーえーえー(´Д`)

と悩んだあげくに、MHFをやって一休憩。

むーん。
キリン変種にハットトリックを決めそうになったりもしましたが、まぁ、それはおいといてですね。

終わって、改めて考え直してみて、これはLockRectangleがおかしいということにして、違う方法を模索することにします。
TextureLoader.LoadFromFileでTextureを読み込んでいるわけでして、そいつの引数になんかないだろうかとヘルプをみてみたら、SaveToStreamなんてメソッドを発見。
Loaderなのに! とか思ったのはナイショですが、まぁ、これを試してみることに。

GraphicsStream stream = TextureLoader.SaveToStream( ImageFileFormat.Bmp, image_info.TextureImage );
Bitmap bitmap = new Bitmap( stream );
e.Graphics.DrawImage( bitmap, new Point( 0, 0) );

こんな感じでやってみたら動きました。
きちんとでるじゃーん。

なんというか、こんなくだらんことに、どんだけ無駄な時間かけたとおもってるんだよ(´Д`)
あーでもαがどうなってるかみてないな。
みないとー。

しかし、ぐぐってもLockRectangleってでてこないってことは、みんな使ってないって事ですかw

今更なんだけど。

C#でちょっとゲーム用にアプリを作っていて、TGAとか読み込む必要性が出てきて、めんどくさいからDirectXにお任せよってことになったんですが、XNAはフレームワークがガチゲーム用で汎用性がなくて、WPFとかは手をつけてなくて、んじゃC#での選択肢はなにかっていったらManaged DirectX(以下MDX)しかないわけですよ。

XNA2.0とかでてて、MDXは1.1から保守サポートしかしねぇですよとか言われているこのご時世にMDXを一から勉強するってのは非常に今更な感じがするわけです。
もうひとつの選択肢としてはC++/CLIなんですが、そんな変態な選択はしたくないなぁと思っているところなので、とりあえずパスなんですよね。まぁ、そんなわけでC#とC++の違いに苦労しながらもひな形をちまちまと作っているわけですが、いやぁ、MDXのことを調べようとしたらVisualStudio2008に付いてくるMSDNにはついてなくて、日本語のヘルプを別途落としてこなきゃだめとか、今更感が加速しまくるんでMSDNにもどしてあげてー!(´Д`)

Mobile向けのMDXのヘルプはあるんだけど、なんか微妙に引数チガウっぽい。

しかし、使えば使うほどC++の住人であるのだなと再確認します。
List(T)はstd::listじゃなかった! とか std::dequeがない! とか、色々と戸惑いまくりますw

VisualStudio2008 SP1のお出ましです。

ずーっと、Beta1をいれるかどうしようか迷っていたのですが、ようやく正式リリースされたようでして、早速いれてきました。
前のvc90.pdbが開けませんっていう、愚かなポカはきっちりと解消されたようです。

当たり前ですけどね(´Д`)

よし、これから少しずつ前のプログラムも思いださんとなー。
何をしていたのかソースのエラーをみていたら飾り文字をもにょもにょしようとしていたらしい。ふーむ。なやましいですな。

絵を描いたりプログラムしたり忙しいなぁ。
本当に忙しいのは仕事なわけですがね・・・orz

C#でもにょもにょ

いやぁ、C#なんぞいじってるんだけど、あれがしたいなーと思ってもなかなかそこにたどり着かないんで、もにょもにょするばかりですよ。
いきなり独自コントロールなんぞ作り始めるからよくないのかもしれませんが、やっぱ見てくれって大事じゃない?

って考えるとどうしてもそこからがとっかかりになるんですよね。
本でもかってこればすぐわかるんでしょうけどね。
そんなにGUIが必要なアプリケーション作らないだろうし、CUIならC++で書くしねーという感じで本を買う踏ん切りがつかないというかなんつーか。

そして、ヘルプを見てもにょもにょ。

MSDNキタワー

Σ--⊂⌒~づoДo)づ新しいのキター

ちょっくら新しいMSDNをつっこんでおくかな。
Officeとか欲しいとおもったらPremiumだし、個人で買うには・・・ とりあえず更新分のお金を細々と貯めることにしますかね。

お金が取れるモノをもっとコンスタントに作ればいいのだろうけどね。

対象外

MSDNから全然返答がこないなーと思ってメールしたら次の日に電話が実家の方にきまして、前の情報をたどっているのかとか思ったわけですがね。
というか、メールしないと電話すらこないってことは、受け付けた後は全部自動処理で人の手を介入しないで問い合わせが来たときだけ調べるってことですかね。
対応するユーザー数を考えれば致し方ないことですけどね。

んで、電話をしてみたら、なんかVisualStudio2008はキャンペーンの対象外らしくて、MSDNの登録受け付けられませんとかいうことでした。

「え、じゃあ、どうすれってこと?」
「2008を返品して2005を買って登録してくださいって言われました」
「・・・・いや、普通ソフトの返品なんて受け付けてないし、そもそも、もう2005売ってないでしょう」
「こちらといたしましては事務手続きしかできないので・・・ 販売店様とご相談してくださいとしか申し上げれないです…」

なるほど。
これはここで引いたらMSDN付きと付きでないのでは差額で5万くらい違うし、ちょいと折り合いが付くようにしてほしいなぁ的なことを交渉しつつ、何度か相談することにしてもらいました。

いや・・・ すんません、クレーマーみたいでorz
でも趣味でVisualStudioを買う方の立場としては、金額が金額だしあっさりと引けないのですよ(´Д`)

VisualStudio2008キタワー

そんなわけで頼んでいたVisualStudio2008がきたんですよ。ひゃっほい。

あけるのに苦労したなんて言わないですよ。
よもや、こう開くとは思いませんでしたけどね。

さっそくインストールして既存のプロジェクトをコンパイルーとしてみたところ、

error C2471: プログラム データベース ‘vc90.pdb’ を更新できません。
fatal error C1083: プログラム データベース ファイルを開けません。

とか言い出す始末。
ぐぐってみたら、/GmをはずすとOKとか書いてますが、うちでは全然だめのようです。
/Gmって簡易ビルドいってるけど、これインクリメンタルビルドのことじゃん。
いやいや、こいつをはずせって酷い話ですよ。

ちょっとお粗末すぎやしませんか。
MSさん。

まぁ、パッチがでるまで我慢するか。
なにせ、2003はさっくりけしちゃったしね!

あまりにもあれだったら、パッチよこせよって言うしかないか。