C#は電気羊の夢を見るか?(引っ越し中)

dtiブログが閉鎖とのことでhttp://tanocs.blog.fc2.com/へ引っ越します。

Windowsの裏技?

画面の向きが簡単に変わる。

ノートパソコンのプレゼンや、液晶縦に使いたいと思ってる人向け。

ALT + Ctrl + ↓(通常の向き)
ALT + Ctrl + ↑(上下逆)
ALT + Ctrl + →(90度回転)


これ、とあるソフトでショートカット探す際に
適当にやったら偶然見つけた物。

はじめは何が起こったか理解するのに時間かかったよ・・・

<後日追記>
できないマシンが有る!と思ったら、
どうやら、この機能、Intelチップ系のグラボでしか使えない模様。

ゲフォならドライバのプロパティから変更できますが、便利なショートカットはない模様。
このエントリーをはてなブックマークに追加
LINEで送る

PDFから画像を抽出する2つの方法

インストールが不要で、とりあえずexeに対象pdfをドラッグ&ドロップだけで楽に抜き出せるのがExtract JPG from PDF

コチラからダウンロード可能


ただ、中身が実はjpgじゃ無かったりした場合は、こいつじゃ無理なので、PDF Explorerをつかう。

ここからダウンロード
このエントリーをはてなブックマークに追加
LINEで送る

VB6.0でマウスホイールを使ってスクロールする

非常に古いねただが、無いと確実に困ると思うマウススクロール。

以前やった時は適当なフリーウェアで対応してたけど、
どうやらマイクロソフト謹製の一品が有るらしい。


それが、VB6 Mouse Wheel.exeです

ダウンロードはコチラ


1. VB6MouseWheel.EXE パッケージをダウンロード
2. VB6MouseWheel.EXE を適当な場所に解凍
3. [スタート]→[ファイル名を指定して実行]で以下のコマンドを入力
「regsvr32 (解凍先)VB6IDEMouseWheelAddin.dll」
4. VB6.0を起動し[アドイン] →[アドイン マネージャ]
5. 「MouseWheel Fix」を選択
6. [ロード/アンロード] と [起動時にロード]の項目にチェック
7. [OK] で完了

これで、安っぽいアイコンをタスクバーに配置せずにVB6.0をマウスでスクロールできるようになります。
このエントリーをはてなブックマークに追加
LINEで送る

レジストリモニタ

昔、と言ってもネット草分け期なのでいまから10年ほど前、
レジストリモニタが欲しくて欲しくて仕方なかった。

アプリを指定して、そのアプリがどのレジストリを参照しているか解れば問題解決できるプログラムが多かったからだ。


明らかに正常な状態でのアップグレードができない事や、
なぜか出てくる旧バージョンへのパッチ適応など、
邪魔なゴミレジストリ情報を消してやればちゃんと行けるはずなのに!と。

しかし、当時はそんな物有るはずも無かった。



時は経ち、今日久しぶりにこの状況にぶち当たった。

新旧バージョンを共存させると言う無茶をやっているのだから、
当然なのだが、新しいほうに適応して欲しいのに、
どーしても古い方にしか適応されない。

今まではいつのまにか「あきらめる」事が当たり前になっていたのだが、
元々いたずらして、新旧バージョンを共存させると言う無茶をやっているので『どうせなら』と久しぶり悪戯心がくすぶった。

早速検索してみると
『今はなんでもあるんだなぁ』とそう思った。

意外だったのはマイクロソフト印のついたソフトだった事。
時代は変わるもんだねぇ・・・


Process Monitor
http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx
このエントリーをはてなブックマークに追加
LINEで送る

WM6.1のアプリとか作ってみる

たまには、と言わず初心に戻ってみる。
単に仕事で使う為とも言う。

というか私物で仕事して良いのか・・・


今回はT-01aで動くアプリ開発方法をご紹介。
ありがちな環境構築記事だけど、以外と探すと無いんだこれが。

って訳でメモメモ


まずVisualstudioを入れてください
今回は入ってる前提で進みます

まず
.net compact framework 3.5 SP1

ActiveSynch

あたりを入れる。
アクティブシンクは任意でもいい気がする


次にWindows Mobile 6 SDK Refreshをダウンロードしてインストール
T-01aはタッチパネルがある Windows Mobile 6 Professional なので
Windows Mobile 6 Professional SDKをダウンロード。

DLはこのへん


次に、日本語版のエミュレーターイメージ(0411/Windows Mobile 6 Professional Images (JPN).msi)をダウンロードしてインストール。

DLはこのへん


これで多分作成が可能になったはず。

デバッグ時の解像度はWVGA (480 x 800) です。
ちなみにイー・モバイルのEM・ONEと同じ。
このエントリーをはてなブックマークに追加
LINEで送る

お引越し

妙に今日投稿が多いわけではなくて、
昔書いてたブログから、人気の有ったエントリをコピーして来ただけ。

微妙に職場で見るには問題の有るブログだったため、こちらにお引越しした。

このエントリーをはてなブックマークに追加
LINEで送る

mspaint.exeのバージョンを落とす

Windowsに標準で付属してくるMSペイント
意外と便利で、どのパソコンにも入っている強みで、
結構使用頻度が高いのだが、
いつの間にかバージョンがあがっていて
あの機能が無い!と言う事もしばしば。

しかし、追加された新機能も捨て難かったりするので、
バージョンが混同出来ればなーと思っていたのですが、
意外とあっさり出来たのでメモ。


この方法はWindowsXPで無くなったWindows2000には存在した
「キャンパスより大きな絵を貼り付けようとしています。
キャンパスを大きくしますか?」
機能をWindowsXPで復活するのに使いました。

バージョンで言えばversion5.1からversion5.0に戻す方法です。
ただし、ヘルプを覗いてもバージョンは両方ともver5.1と表示されます。


方法は以下の通り。
Win2kの入っているパソコンからsystem32/mspaint.exeをコピー。
WinXPでコピーしたexeを実行すれば、ver5.0同様に振舞います。

ただし、違うバージョンのOSを使うので、廃棄予定のパソコンや
XPやVistaへバージョンアップした元の2000を使う等、
配慮が必要だと思います。一応。


ちなみに5.0ではpngが扱えなかったりします。
このエントリーをはてなブックマークに追加
LINEで送る

USBリムーバブルディスクのドライブレターを固定する

フラッシュメディア等でドライブレターを固定する必要が仕事で発生したので、
その方法をここにメモしておく。


=使うPCが固定の場合=
USBメモリを使用する各PCで以下の設定を行う

1. コントロールパネルを開く
2. パフォーマンスとメンテナンスを開く
3. 管理ツールを開く
4. コンピュータの管理を開く
5. ディスクの管理を開く
6. 当該のデバイスを選択しマウス右クリック
7. ドライブ文字とパスの変更を選択
8. 変更を選択し、設定したいドライブレターを選択
  (すべてのPCで共通となるレターを選択すること)

以上で、USBメモリを挿した時のドライブ名は固定されます。


=使うPC、メディアが非固定の場合=

あらかじめ、好きな名前でフォルダを一つ作成しておく
(ここでは仮にDataFolderとした)
そして、過去の記事に有るUSB自動実行を使ってバッチを起動する。
そのバッチに以下の内容を追加

subst x: DataFolder

これでバッチファイルが実行されるとUSB内のDataFolderフォルダが、
哨疋薀ぅ屬箸靴動靴錣譴襦


ただし、これら方法は自動実行のプログラムをあらかじめインストールするか、
一つのOSに対して一つのメディアを固定で設定する必要が有る為
”不特定多数のPCには無効”
と言う大きな欠点が有るので、気をつけていただきたい。
このエントリーをはてなブックマークに追加
LINEで送る

周波数を指定して音を作成できるフリーウェア

周波数を指定して音を作成できるフリーウェア「WaveGene」のご紹介

このソフトを使った、モスキート音、デジタル蚊よけ、ねずみよけ作成方法は続きからどうぞ


このソフトはサイン波、矩形波、三角波、ノコギリ波、パルス列、ホワイトノイズ、ピンクノイズ、M系列ノイズ(MLS)の8種類の波形を、3つ同時に任意に組合わせて(ミックス)出力することができます。

さらにユーザー波形として任意の波形(Waveフォーマット、および独自テキストフォーマット)を取り込んで発生させることができます。

さらになんと、ASIOドライバにまで対応しているので、音楽シーンでの使用にも耐える設計なのです。


下記のサイトからダウンロードできます。
http://www.ne.jp/asahi/fa/efu/soft/wg/wg.html


これでモスキート音(16khz〜20khzの正弦波)を発生させて、年齢チェックしてみたり
メスの蚊の嫌う6KHz〜9KHz、16KHz〜18KHzの音を作ってデジタル蚊よけにしてみたり
オスの蚊が寄ってくるリスクはあるものの、オスがメスの位置を特定できなくなる為に繁殖力を低下させる300-500hzの音を作る事もできる。ちなみにオス蚊は刺してこないので、羽音以外は無害。

あと、似たような効果でねずみの嫌う25KHzの音でデジタルねずみよけとかも如何でしょうか?
このエントリーをはてなブックマークに追加
LINEで送る

Firefoxのブックマークを復活させる方法

職場で使っていたPCのHDDがお亡くなりになった。

データのサルベージには成功し、何とか復旧したのだが、
Firefoxのブックマークの復旧に苦労したので、
同じような誰かのために手順を記しておく。

ちなみにこの方法は、間違って消してしまったブックマークの復活にも使えるが、
戻せるのは5日前までなのでご注意を。

=WindowsXP/Firefox2.0.0.8の場合=

1.
Firefoxをすべて閉じる

2.
C:Documents and Settings[ユーザ名]Application DataMozillaFirefoxProfiles[英数字のフォルダ]bookmarkbackupsbookmarks-[バックアップの日付].html
の全内容をコピー

3.
C:Documents and Settings[ユーザ名]Application DataMozillaFirefoxProfiles[英数字のフォルダ]bookmarks.html
に先ほどコピーした全内容を上書きで貼り付ける

4.
Firefoxを起動してブックマークに反映されているか確認する


今回は全ての内容を上書きしたけど、
バックアップファイルの内容は拡張子のとおりhtmlなので、
htmlのわかる人なら内容を編集してインポートすることもできる。
このエントリーをはてなブックマークに追加
LINEで送る

フリーの仮想プリンタドライバ

通常のプリンタに出力するように、
アプリケーションからの印刷を画像として保存することができるソフト
Virtual Image Printer driverの紹介

出力はBMP・PNG・JPEG・TIFF・PDFの各形式で可能

日本語だとこの手のソフトはシェアウェアしかないので英語版ですが、
インストール時以外で英語であることを意識する事がないので、
全く気にならないと思う。

ソフトのバージョン違いや、特殊なフォーマットのソフトで
相手先のパソコンで見れない時などに重宝します。


以下のサイトにインストールの解説が有ります。
gigazine[印刷結果を画像ファイル化する仮想プリンタ「Virtual Image Printer driver」]

ダウンロードは以下のサイトから
http://sourceforge.net/projects/imageprinter
このエントリーをはてなブックマークに追加
LINEで送る

C#でgifの透過情報を扱う

C#で透過付きgif89aを簡単に扱う方法を紹介します。


読み込んだ段階でbitmapクラスに黒く変更された色情報の復旧について書かれている事が少なかった為、覚書。


Bitmap img = Bitmap("image.gif");

とするとPixelFormatはFormat8bppIndexedでは無く
Format32bppArgbでBitmapオブジェクトがインスタンスされます。
その際、透過色に指定されている色が元の色に関係なく黒に変換されてしまいます。

そのため、何らかの処理を経て、透過の表示を行おうとすると、
透過部分が黒く塗りつぶされた状態になってしまいます。

それを回避するためには、途中の処理で使うbitmapクラスをすべて
Format32bppArgbで処理を行えば下記の状態で透過を残すことが出来ます。


すでに読み込んで有るデータの通常の黒は
Color.FromArgb(255, 0, 0, 0);
読み込み時に変更された黒が
Color.FromArgb(0, 0, 0, 0);
であるため、通常の黒と見分けることが出来ます。


ほとんどの画像処理を高速化するサンプルが、unsafeコードで一旦Format24bppRgbに変換を行っているために、そのまま処理を行うとアルファ情報が落ちていると思います。


また、読み込んだままFormat8bppIndexedに無理やり戻してもアルファ情報が落ちます。
Format8bppIndexedに戻すには一旦アルファ値が0の黒を元のパレットの透過色に戻してから変換する必要が有ります。

ColorPaletteを使ったパレットデータを変更する方法はあちこちで記されていますが、読み込んだ段階でFormat32bppArgb に変更されているため、この変更された色はパレットデータのアルファを0から255に書き換えて適用しても復元できませんでした。


通常黒と透過で変更された黒が見分けられれば、
保存やサイズ変更への応用も出来ると思います。



読み込んだgifでウィンドウを切り取るサンプル
(たぶんpngでも同様に可)


//画像を読む
Bitmap img = new Bitmap("img.gif");

//フォームを非短径で表示する
System.Drawing.Drawing2D.GraphicsPath gpath =
new System.Drawing.Drawing2D.GraphicsPath();

BitmapData bmpData = img.LockBits(
new Rectangle(0, 0, img.Width, img.Height),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppArgb);

int stride = bmpData.Stride;
int nResidual = stride - img.Width * 4;

unsafe {
byte* p = (byte*)(void*)bmpData.Scan0;

for (int y = 0; y < img.Height; ++y) {
for (int x = 0; x < img.Width; ++x) {

// アルファ:p[3] 赤:p[2] 緑:p[1] 青:p[0]
if (p[3] != 0) {
gpath.AddRectangle(new Rectangle(x, y, 1, 1));
}

p += 4;
}

p += nResidual;
}

} //unsafe終わり

img.UnlockBits(bmpData);

//フォームにパスを適用
this.Region = new Region(gpath);
このエントリーをはてなブックマークに追加
LINEで送る

改行付きテキストボックスのデータを扱う

テキストボックスのMultilineをtrueにして、それを各行に分けて処理をしたい場合、
RegexクラスのSplitメソッドを使うのですが、これが無茶苦茶おっそい!

そこでVisualBasic.StringsクラスのSplitメソッドを使うという飛び道具も有る様ですが、
もう一歩踏み込んでstring.Splitを使用する方法をメモ


textBox1.Text.Replace("rn", "n").Split('n');


テキストボックス内の改行は"rn"なので、それを"n"に置き換えて処理する。
こうする事によって高速にテキストボックス内のテキストを配列に格納する事が出来ます。
このエントリーをはてなブックマークに追加
LINEで送る

テキストボックス謎の挙動

TextBoxのTextプロパティにコードから値を代入すると、次回フォーカス取得時になぜか全選択された状態になる。

これって、何気に作ってると非常に見栄えがよろしくない上に、
まともにやると回避も意外と面倒だったりする。


以下の方法で回避可能

textBox1.Text = "テキスト";
textBox1.SelectionStart = textBox1.SelectionStart;


どうやら仕様らしいんだけど、なんか気持ち悪い上、代入のたびにこれってのもなぁ・・・


面倒な場合はカスタムコントロールって選択肢もあるっぽい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38093&forum=7
このエントリーをはてなブックマークに追加
LINEで送る

Graphicオブジェクトの注意点

毎回なんとなくで作っていたGraphicオブジェクトだが、CreateGraphics()が妙に遅く感じたので、
調査して見ると以下の事が解った

Graphicsオブジェクトを作成する方法は3つ。
1.Imageオブジェクトから作成
2.CreateGraphicsメソッドを使う方法
3.PaintイベントのPaintEventArgsから取得する方法


2よりも1の方法が10倍近く高速に処理を行える
3は用意した状態の再描画専用で、ほかの事をしないのが定石
(再描画の度に複雑な処理を行わない)
このエントリーをはてなブックマークに追加
LINEで送る

Bitmap関連続き

『インデックス付きのピクセル形式をもつイメージからグラフィックス オブジェクトを作成することはできません』なるエラーが出る時の対処方法。


■駄目なパターン■
Bitmap bmp = new Bitmap(FilePath);
Graphics g = Graphics.FromImage(bmp);


■改善版■
Bitmap src = new Bitmap(FilePath);
Bitmap Bmp = new Bitmap(src.Width, src.Height);
Graphics g = Graphics.FromImage(Bmp);
g.DrawImage(src, 0, 0, src.Width, src.Height);
src.Dispose();


先にグラフィックオブジェクトを欲しいサイズで作っておいて、
そこへあらかじめ読み込んだイメージをコピーする事で、
読み込み元のイメージフォーマットを無視する事が出来る。


■応用■
Bitmap src = new Bitmap(FilePath);
Bitmap Bmp = new Bitmap(src.Width, src.Height, PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(Bmp);
g.DrawImage(src, 0, 0, src.Width, src.Height);
src.Dispose();

このように、読み込み元のフォーマットにかかわらず、
指定のフォーマットに変更することも可能。


※using使うとdisposeが減らせるらしい
Bitmap destImage = new Bitmap(size);
using (Bitmap srcImage = new Bitmap(filename))
using (Graphics destGraphics = Graphics.FromImage(destImage))
{
destGraphics.DrawImage(srcImage, Rectangle, Rectangle);
}
destImage.Save(filename, format);

======================================
Bitmap destImage = new Bitmap(100,100);
using (Bitmap srcImage = new Bitmap(@"filename.PNG"))
using (Graphics destGraphics = Graphics.FromImage(destImage))
destGraphics.DrawImage(srcImage, dstRect,0,0,100,100,GraphicsUnit.Pixel);
destImage.Save(@"filename.PNG", ImageFormat.Png);
destImage.Dispose();
このエントリーをはてなブックマークに追加
LINEで送る

intPtr

OpenCVなんかで画像作ると高速化のためそのままIntptrで使い続ける事が多いんだけど、
高速化を目的としないときは利便性が落ちる。

開発効率を優先する為に速度を犠牲にして作業する為のメモ

IntPtr pt = Marshal.AllocHGlobal(1228800);

ImageBuf = new Bitmap(640,
480,
2560,
System.Drawing.Imaging.PixelFormat.Format32bppArgb,
pt);
このエントリーをはてなブックマークに追加
LINEで送る

Bitmapをコピーする。

bmpをのっぴきいかない理由でコピーするとき、
Bitmap bmp = new Bitmap(sourceBmp);
とすると強制的にpixelFormatがFormat32bppArgbになる。

Format24bppRgbの方が高速かつ省メモリだから、
それを利用したいのに余計なお世話過ぎる。


とどまるところ、コピー元のpixelFormatを無視してデフォルト値で作成するのが原因っぽい。

こいつを何とかするには
Bitmap.Cloneメソッドを使えばいい。


しかし、それでも駄目な場合は

Bitmap bitmap2 = new Bitmap(sourceBmp.Width, sourceBmp.Height, PixelFormat.Format24bppRgb);

Graphics graphics2 = Graphics.FromImage(bitmap2);

graphics2.DrawImage(sourceBmp, 0, 0);

としてやると強制的にPixelFormatを書きかえれる。
しかし、Graphics.FromImageが結構低速なのでお勧めできない・・・


何度もはまってるくせに忘れがちなのでメモっとく。
このエントリーをはてなブックマークに追加
LINEで送る

BlenderのCollada Exporterのメニュー解説

ここを見て『おー、FreeStyleの新しいの出てるー』
と、思ったらもうBlender 2.5のインターフェースになったのね・・・


んで、学生による夏休みの自由研究的なイメージの
Collada出力のテストビルドを試してみる。

が、案の定インタフェースが2.5系になってるし、
出力できるColladaが1.41のポリゴンのみになってるよ、コンチクショウ!

ってな訳で、まだまだ旧型のCollada Exporterを使うしかないのです。
そんなこんなで、コラダのエクスポーターのオプションのメモでも


=Triangles or Polygons=
三角ポリゴンで出力するか、多角形を許容するか


=OnlyExport Selection=
選択されている物のみを出力
これを選択しないとカメラや、そのほかのblender上のオブジェクトも一緒に出力される。
意図しないときはチェックしておくのがベター


=Bake Matrices=
マトリクス情報を焼きこむ。
Bake Matricesのオプションを入れるとアニメーションは無効になります。


=Sanmple Animation=
フレーム毎のアニメーションデータをエクスポートする。

アニメーションデータ(library_animations)が増える
アニメーションデータを含まない場合、データに変化なし。


=Disable Physics=
物理演算エンジン用のデータ(当たり判定情報など)を一緒に書き出すかどうか。


=Only Current Scene=
現在のシーンのみを書き出す。
Only Export Selectedをオンにしている場合は意味がない


=Use Relative Paths=
関連するファイルのパス名を相対パスで出力する。
オンにしない場合はフルパスが出力される。
オンにしておいた方が無難。

追記:パスがまったく出力されなくなるので、ローダーによっては外す事によって読み込めない物が有りそう。

また、日本語のパスは化けるので、デスクトップ等、フォルダに日本語を含むパスでは出力できない。


=Use UV Image Mats=
テクスチャにUV/Image Editorのテクスチャ(とUV)を用いる。
マテリアルウィンドウで指定したマテリアルは破棄される。
オフの場合はマテリアルウィンドウのマテリアルを書き出す。


=Apply modifers=
Apply Modifiersを有効にするとArmatureモディファイアも適用されます。
このためArmatureでアニメーションしている物を書き出す時に
Apply Modifiersを有効にすると正常に書き出されません。
このエントリーをはてなブックマークに追加
LINEで送る

同時に3候補出してくれる翻訳ツール

ひさびさに「ほしかったんだよねぇ、これ」ってツールに出会った。

使い勝手によって変わるので二つ紹介

■フリートランスレーター
http://www15.big.or.jp/~t98907/freetranslator/

■翻訳Tool
http://www.asahi-net.or.jp/~tz2s-nsmr/honyaku.html


簡単に言えばウェブ翻訳の結果を横取りして、
おいしい物を使おうと言う物。

実際二つとも使ってみると、非常に使いやすい物の
やっぱり自分専用を作りたくなる不思議。

製品と言うのは最大公約数的な物しか出来ないので仕方ないない。


追記:
記事は古いけど、YahooPipsなる手があるのか
http://muumoo.jp/news/2007/12/29/0translationapi.html
http://webos-goodies.jp/archives/51064439.html
このエントリーをはてなブックマークに追加
LINEで送る

 | HOME | 

PAGE TOP ▲

Appendix

■春条

■春条

生息地は愛知
車と甘い物が好きな31歳
特技は無限昼寝

MONOからSharpDXを使う
変態的な手法で、
.NET Frameworkを使わずに
ゲーム作りやってます。

Search

Calender

« | 2009-10 | »
S M T W T F S
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Twitter

Recent Entries

DTIブログポータルへ
このブログを通報
Report Abuse

利用規約