[WP]no.015 C言語でbmp編集

数時間くらいで作成。初めてgoto使った気がします。


画像解析も、画像を読み込めなければ意味がありません。
というわけで、ビットマップファイルbmpの読み込みと保存。

windowsでもlinuxでもコンパイルできるはず。


bmpファイルヘッダ構造体を定義せずに書いていったのですが、やはり読みにくい。
簡易的に読み書きできればいいやー感でやりました。ごめんなさい

しかも構造体で書いた方が動作早そうじゃない?


こちらのサイトにBMPのバイナリ構造についての解説があります。

ルーチェ's Homepage
http://www.ruche-home.net/program/bmp/struct


こちらのサイトに沿って記述し、また出力ファイルは、適当なビュアーで表示できたので問題ないでしょう。

wikipediaにもありました(2015/09/04)。

wikipedia
https://ja.wikipedia.org/wiki/Windows_bitmap



BMPファイルにはさまざまなパターンがあり、無圧縮やRLE圧縮、jpeg圧縮されたもの、パレットを持つもの等があります。
当然、全てのパターンに対応すべきですが、ここでは「24bit無圧縮」のみとします。他はエラーで弾くようにします。

もちろん、出力も「24bit無圧縮」のみです。ファイルが大きくなるので、サイズは320x240か256x256に抑えるべきです。


ファイルが読み込めなかった場合、そのbmpファイルがパレットを持っているかどうか(256色bmp等)確かめてください。
windows標準のmspaintで「24bit無圧縮」に変換できます。


2015/09/06 改良しました。
http://shonen9th.blog.fc2.com/blog-entry-54.html


…実用性を求めるならば、C++のオープンソースライブラリとか

libbmp24
http://doscoy.github.io/libbmp24/

続きを読む

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : C 画像解析

Python クラス作成

http://shonen9th.blog.fc2.com/blog-entry-51.html

ここに載せた簡単なシューティングゲームをクラスを使ったソースコードに書き換えた。
playershottimeの挙動が変わっていますが、他に変化は無いはず。


関数名や変数名を「__func」のようにするとカプセル化(private、外部から参照不可)できるそうです。使いませんでしたが。

「def func(self,prm1,prm2)」のように、selfが付いています。本来ならば、
classname.func(classval,prm1,prm2)
と呼び出す必要があるのですが、
classval.func(prm1,prm2)
とも記述することが可能。こちらの方が慣れ親しんでいるはずなので、大抵はこちらを採用。
実はhsp3の#modfuncも、これに似た形に展開されるし、上に似た形式で呼び出す必要がある。


公式のチュートリアルがselfだったから、selfという名前にしているだけであって、もっと読みやすい名前にすべきだったかも。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : Python

[WP]no.014 python独習

艦これやりながら作成していたので時間は測定不能の様子

pythonをやってみたかったので、手軽なシューティングゲームを作ってみました。
ゲームが面白いかどうかは別。

グラフィックを扱うため、pygameライブラリを使用。環境はWindows。
cygwinでやろうと考えていましたが、グラフィックが未インストールだったのでWindows版pythonをインストール。

ここではクラスは殆ど扱いません。(よって非常に読みにくい)。
代わりにリストを使用します。Arrayクラスがあるようですが、リストで記述するのが一般のようです。まじか。
→こちらでクラスを使用した記述をしました。http://shonen9th.blog.fc2.com/blog-entry-52.html

単に自由度の高いゲームを作りたい方はHSPをお勧めします。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : Python

[WP]no.013 学習細胞的な何か


Neuron(脳細胞)とかいうクラス名になってますが、そこまで専門的な事はやっていないです。入門・基礎レベル。
ハードウェアレベル(論理回路)でも書けるレベル。


「xxxという値が与えられたとき、これはtrueか?falseか?」を行うneuronです。
neuronが保持する状態として、「xxという値はたぶんtrue、yyという値は絶対false、zzという値はたぶんfalse…」を記憶します。

「xxはfalseでした」→「xxという値はたぶんfalse」
「xxはtrueでした」→「xxという値は絶対true」
と、状態を変化させれば、学習できます。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : c++ アルゴリズムとデータ構造

[WP]no.012 C++ stack,queue

weekly programingの1週間の定義が曖昧に

コレクションが気に入らなかったので自作した。

途中からやっぱりC++の仕様に嫌気が差したので雑仕様。C言語脳です
ポインタで操作。参照型を使わざるを得ない、という状況ではないと思うので。
operator []は参照型の方が良かったかもしれません。

テンプレート型は分割コンパイルできないんですね。ヘッダに中身を書く必要があります。


自分でこのプログラムを使うか?と言われたら使いませんけどね…もう少し改良が必要かもしれません…

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : アルゴリズムとデータ構造 c++

[WP]no.011 [unity] Flip操作を作ってみる

ついでに投稿しておこうシリーズ
製作時間:NaN

Robocraftで機体がひっくり返った時に、Fキー押して機体を水平に戻すアレみたいな感じ。

操作として、
1.機体を上にあげる
2.機体を回転させる

横転した機体。キーを押すと持ちあがる。

回転

水平状態まで回転する。



続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : Unity

GoogleChrome シンボリックリンクによるキャッシュの移動ができなくなった?

多くのブラウザは、ブラウジングを高速にするため、キャッシュと呼ばれる一時ファイルを保管します。
キャッシュは頻繁にアクセスされることが予想されるので、ちょっと知識のある人なら、キャッシュフォルダのディレクトリを
より高速アクセスが可能なRAMDISKに移動させよう、と考えるでしょう。

しかしGoogleChromeの設定ウィンドウには、そんな設定項目は無い。chrome設定項目少なすぎ

多くのウェブサイトでは、GoogleChromeのキャッシュディレクトリを強引に移動させるべく、シンボリックリンクを用いた手法を挙げていました。(ここではその手法は挙げませんので、ググってください。)
僕もシンボリックリンクを使ってRAMDISKにキャッシュを保存させていました。



が、とあるアップデートからか、Chrome起動時にシンボリックリンクを剥がすようになった模様。
シンボリックリンクを作成したのを確認してからChromeを起動してみると、ショートカットを無理やり剥がすのを確認。

セキュリティの問題があったのでしょう。シンボリックリンクは諦めましょう。



実はキャッシュを移動させる方法として、起動オプションに「--­­disk-cache-dir」を用いる方法があるようです。
(ここではその手法は挙げませんので、「chrome cache disk-cache-dir」でググってください。)

起動リンクなんて、ざっと数えただけで「デスクトップ」「スタートボタン」「タスクバー」「関連付け」と既に4つありますからね…。
(流石に上の4つをすべて網羅すれば大半は問題ないはずですがw)


RAMDISKに拘るなら狐(firefox)に化けるのも手だと思います。

ちなみに僕は用途でブラウザ分けてます(chrome,firefox)。Edgeは未だ使ったことが無いのですが、どうなんだろう。InternetExplorer...

追記:
起動オプション--disk-cache-dir="address"を貼ってもhttp://disk-cache-dirのタブが出る…何故だ。
追記:
半角スペース2つ入れたら治りました。え、2つ入れるの…?

テーマ : ブラウザ
ジャンル : コンピュータ

[WP]no.010 TonyuSystem-オブジェクト選択

手抜き
30分ぐらいで作成。

戦略ストラテジー作ろうかなと考えてただけ。

ドラッグするとEntityクラスのオブジェクトを選択できます。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : TonyuSystem

malloc・newで確保したポインタを返す関数の作成時に気を付けるべきこと

関数内でmallocするときの注意
http://oswald.hatenablog.com/entry/20081210/1228920110

この記事と全く同じミスをしてしまったのですが、対策として返り値を使用するといった手段を挙げているので、「リスク回避」ですね。
解決にはなってないような気がします。

もう少し考え直してみる。

#include <stdio.h>
#include <stdlib.h>

void alc5(int *p){
int i;
p = (int *)malloc (sizeof(int)*5);
for (i=0;i<5;i++)p[i]=i*i;
}
int main (void){
int *p,i;

alc5(p);
for (i=0;i<5;i++) printf("%d\n",p[i]);

free (p);
return 0;
}

セグメンテーションエラー引き起こします。何故か。

alc5(p);

ポインタ変数の中身のコピーを渡してます。
ポインタ変数の中身を書き換えたいなら、ポインタ変数のポインタのコピーを渡すべき。

「ポインタのポインタ」または「ポインタの参照型(C++)」が正解。

#include <stdio.h>
#include <stdlib.h>

void alc5(int **p){
int i;
*p = (int *)malloc (sizeof(int)*5);
for (i=0;i<5;i++) (*p)[i]=i*i;
}
int main (void){
int *p,i;

alc5(&p);
for (i=0;i<5;i++) printf("%d\n",p[i]);

free (p);
return 0;
}

テーマ : プログラミング
ジャンル : コンピュータ

tag : C

[WP]no.009 ハフマン符号作成

1時間半くらいで作成

エントロピー符号の一種だそう
https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%95%E3%83%9E%E3%83%B3%E7%AC%A6%E5%8F%B7

実行結果(hotsoupprocessor):

c 01100011 0000000000000000000000000010010
e 01100101 0000000000000000000000000010011
h 01101000 0000000000000000000000000010101
o 01101111 0000000000000000000000000000110
p 01110000 0000000000000000000000000001011
r 01110010 0000000000000000000000000001110
s 01110011 0000000000000000000000000001111
t 01110100 0000000000000000000000000001000
u 01110101 0000000000000000000000000010100

多分このコードで大丈夫。
例えば、1→0→1→0→1(h)→0→1→1(o)→0→0→0→1(t)という解釈。

続きを読む

テーマ : プログラミング
ジャンル : コンピュータ

tag : HSP3 アルゴリズムとデータ構造

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++JavaRubyUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1437位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
245位
アクセスランキングを見る>>