<   2015年 09月 ( 6 )   > この月の画像一覧

テンプレ編集

右カラムの幅が気に入らなかったのでテンプレートを直してみた。

DIV.PROFILE 以降のWIDTH を150px→ 250pxへ変更
2カラムなんでColumnDefinitionsの割合を8:2から7:3ぐらいへ変更
取りあえず見切れてたTwitterのブログパーツは全部表示されるようになった。
が、肝心のTL欄がまだ狭い・・・けどここ変更するところがテンプレートにないという事態。
なんかプロフィール画像もAlignがCenterになってるなぁ。

うーん、ブログパーツの幅は変えられないのかな・・・
ともかく来週はスマホ用テンプレートをいじってみよう。

[PR]
by onigirism | 2015-09-25 19:06 | まーくあっぷ | Comments(0)

Androidのオススメアプリ1

もうスマホ一強時代になってずいぶん経つので今さらな話題かもしれないけど
よく考えたら毎年スマホユーザーって増えるんだよね
中学校入学祝いとか、早けりゃ小学校とかかもしれない

そういう人たちのためにシリーズで自分が使うオススメのアプリをご紹介

第一回は「SwipePad

アプリの簡単起動の雄、いわゆるランチャーというやつ
画面の端っこをズイッと滑らせるとショートカット一覧が出るので

あとは起動したいアプリに指を合わせるだけっていう簡単システム

e0349767_10431343.png


自分は左手でスマホ操作するので、親指で画面の赤い部分をなぞる(スワイプ)すると

e0349767_10450220.png
こんな感じでショートカットが出て来る(青い丸は指のあるところね)
いちいちアプリ一覧からアプリを探して・・・とかホームにショートカットを置かなくていいので非常に重宝してます。

[PR]
by onigirism | 2015-09-25 10:47 | スマホ | Comments(0)

array_key_existsとisset

たまたま調べてた時に発見したのでメモ

<?php
$search_array
= array('first' => null, 'second' => 4);

// false を返します
isset($search_array['first']);

// true を返します
array_key_exists('first', $search_array);
?>


issetはvalueの有無、array_key_existsはkeyの有無だから・・・まぁ当然っちゃ当然だわな。



[PR]
by onigirism | 2015-09-15 17:01 | プログラミング | Comments(0)

トロピカルパーク2

SABOTEN&PANのスプリットアルバム、TROPICAL PARK2が
ちょっと前にリリースされてます。
e0349767_11004445.jpg
夏の虫インザファイヤーは、仲良しバンドの錚々たる顔ぶれが。
ちょっと聴いてて思ったんだけど、川さん声の感じがキヨシさんに似てきてる気がする。
どっちが歌ってんのか、あるいは全部キヨシさんが歌ってんのか?って錯覚するぐらいに。

何はともあれオススメの一品です。

[PR]
by onigirism | 2015-09-14 11:05 | Music | Comments(0)

Blender修行

Kinectで3Dモデルを動かすのに避けて通れないのが
ボーンとテクスチャの依存関係の編集なわけだけど

これがなかなか難しい・・・
まずBlenderが難しすぎて。大学で土いじりをしてた即興プログラマの自分では
なかなか理解が追いつかない。

数あるショートカットキーを使いこなしてようやく、というところ。
一応のところ、最低出来ればOKというところまでは行けた(はず)。

e0349767_10535874.png


これはどこぞで見たことのあるアメコミのヒーローに、
アーマチュアを追加してウェイトのセッティングが済んだもの。
この状態でFBXとして出力してUnityにぶっこめば動かせるわけだが

e0349767_11271683.png
テンションは上がる、テンションは。

[PR]
by onigirism | 2015-09-03 11:50 | Blender | Comments(0)

ColorFrameReader その2

夏休みを挟んで久々に再開

前回の続きです。
最後にこうなってましたね。

public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;

kinect = KinectSensor.GetDefault();
cReader = kinect.ColorFrameSource.OpenReader();
cDesc = kinect.ColorFrameSource.FrameDescription;
cBuff = new byte[cDesc.Width * cDesc.Height * 4];
wBitmap = new WriteableBitmap(cDesc.Width, cDesc.Height, 96.0, 96.0, PixelFormats.Bgra32, null);

cReader.FrameArrived += cReader_FrameArrived;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
kinect.Open.();
}

private void cReader_FrameArrived(object sender, ColorFrameArrivedEventArgs e)
{

}

さて、この段階でアプリを実行すると、画面上には何も出ないけど
一応Kinectは起動すると思います。
何も出ないのは当然、Kinectが取得するデータに何にも手を付けてないからです。

ということで手を付けます。
カラーデータを毎フレーム取得するイベントハンドラが登録されていますね。(一番下のproc)
ここに色々書いていきます。

まずKinectのデータ取得についてのお約束として
毎回フレームデータを取得⇒使い終わったら破棄
という流れを覚えておきましょう。
それを踏まえて以下のように書きます。

using ( ColorFrame cFrame = e.FrameReference.AcquireFrame() )
{
if ( cFrame != null )
{

}
}

IDisposableオブジェクトであるColorFrameはusingステートメントを使うことで
記述をおもっくそ簡略化出来ますね、最後にDisposeとかやらんでも勝手にやってくれます。
一時データとして取得したcFrameを使ってデータを加工します。

次、

if ((cDesc.Width == wImage.PixelWidth) && (cDesc.Height == wImage.PixelHeight))
{
if (cFrame.RawColorImageFormat == ColorImageFormat.Bgra)
{
cFrame.CopyRawFrameDataToArray(cBuff);
}
else
{
cFrame.CopyConvertedFrameDataToArray(cBuff, ColorImageFormat.Bgra);
}
}

バッファにcFrameのデータをコピーします。
ここでフレームのColorImageFormatの場合分けをしてますが、意図的にイジりでもしない限り、
あるいはIDEがVisualStudioである限りはBGRA形式で渡ってきます。
これがUnityの場合だとyuv(だっけ?)で来ちゃうのでBytesPerPixelがRGBAと違ってエラーになります。
念のため的な処置ですがデータコピーにはこういう手順を踏んでおきましょう。

あとはWriteableBitmapに取得したデータをオラオラするだけです。
wImage.WritePixels(
new Int32Rect(0, 0, wImage.PixelWidth, wImage.PixelHeight),
cBuff,
wImage.PixelWidth * (int)bpp,
0
);
オフセットって言うのがイマイチよく分かってません、ごめんなさい。
ただ、0から1にしたりするとエラーを吐くのでそういうもんなんでしょう(適当)
書き込み始める位置の調整なのかな?

さて、長々書きましたが全体でこうなります。

public MainWindow()
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;

kinect = KinectSensor.GetDefault();
cReader = kinect.ColorFrameSource.OpenReader();
cDesc = kinect.ColorFrameSource.FrameDescription;
cBuff = new byte[cDesc.Width * cDesc.Height * 4];
wBitmap = new WriteableBitmap(cDesc.Width, cDesc.Height, 96.0, 96.0, PixelFormats.Bgra32, null);

cReader.FrameArrived += cReader_FrameArrived;
}

private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
kinect.Open.();
}

private void cReader_FrameArrived(object sender, ColorFrameArrivedEventArgs e)
{
using ( ColorFrame cFrame = e.FrameReference.AcquireFrame() )
{
if ( cFrame != null )
{
if ((cDesc.Width == wImage.PixelWidth) && (cDesc.Height == wImage.PixelHeight))
{
if (cFrame.RawColorImageFormat == ColorImageFormat.Bgra)
{
cFrame.CopyRawFrameDataToArray(cBuff);
}
else
{
cFrame.CopyConvertedFrameDataToArray(cBuff, ColorImageFormat.Bgra);
}

wImage.WritePixels(
new Int32Rect(0, 0, wImage.PixelWidth, wImage.PixelHeight),
cBuff,
wImage.PixelWidth * (int)bpp,
0
);
}
}
}
}

これで出来る限り最小のカメラ画像取得ロジックの完成

ではないです。

wImageにデータを書き込んだはいいがそれをコントロール側に渡していませんね。
この辺はちょっとジャンルの違う話になってくるのでテキトーですいません。

public ImageSource cameraImg
{
get { return wImage; }
}

こんな感じでcameraImgをXAML側にバインドすれば完成です。
あぁ長かった。

[PR]
by onigirism | 2015-09-02 11:35 | Kinect | Comments(0)