プログラム開発日記の最近のブログ記事

「おてがる画像変換」で変換したときに、変換前の画像のExif情報を
変換後の画像に引き継ぎたかったため、C#でExif情報を編集する方法を調べてみました。

■サンプルプログラム1
 JPEG画像を開いてExif情報をテキストとして出力し、
 画像の「作成者」の項目を変更して、別名で保存するだけの
 サンプルを作成してみましたので、アップロードしておきます。
 (Visual Strudio2005のプロジェクトです)
 http://www.bird-soft.net/download/testExif.zip

これができると、Exif情報をプログラムから変更できるので便利です。

例えば、Canonのカメラで撮影した画像にはExifにカメラのシリアルNo.(製造番号)が
埋め込まれてしまいます。

実害はないはずですが、カメラ固有の情報がExif情報にのってしまうというのが
写真を公開する際には若干気になります。

しかし、Exif情報をすべて削除してしまうと、シャッター速度やISO感度などの
情報が消えてしまうので、不便を感じることもありました。

そこで、拙作フリーソフト「おてがる画像変換( Ver0.3.3β)」にシリアルNo.削除の機能をつけてみました。
同じ悩みのある人はぜひ試してみてください。
http://www.bird-soft.net/ImageConverter.html#DL

※Canon EOS Kiss X3の場合にうまく動作することを確認しましたが、
 機種や撮影条件によりExifの記録内容が違えばうまく動かないです
 その場合、この機能は使用しないでください。
 Canon独自タグが壊れてしまいます。

※Exif情報のカメラメーカー(Id:271)が"Canon" で
 かつId:37500(0x927c)がある場合、この機能は動作します

★参考サイト、CanonのExifからカメラのシリアル番号削除するコードは続きから
---

先日、Excelの資料の山のようなデータを整理する作業を行いました。
非常に単純作業で、何時間もかかりました。

プログラムを使って処理してしまえばもっと楽になるのになぁと思いながらも、
結局手作業で終わらせました。
私はエクセルのマクロもわからないし、勉強している時間もなかったので。

Visual C#を使って、そのような処理が書けたらいいのになぁ
と思ったので、あとで調べてみました。

意外にネットに情報がない(VBばかり)なのが驚きでしたが、
Nagadon の C# 入門(メールマガジン)によい記事がありましたので、それを参考に
(元のサンプルより簡略化してあります)単純なサンプルを作ってみました。

CsExcel.png

せっかくなので以下に作成したプロジェクトを置いておきます。

■Visual C#でExcelを操作するサンプルプロジェクトのダウンロード
Visual C#でExcelを操作するサンプルプロジェクト

※Visual Studio 2005で作成。

※十分に動作確認したわけではないですのでご使用は自己責任でお願いします。

ひさびさにおてがる画像変換のバージョンを行いました。
今回は質問やリクエストの内容を反映したものです。


1.画像をドロップするべきウインドウがわかりにくかったため、メインウインドウにメッセージを出しておくように変更(プレビューウインドウではなく、メインのウインドウにドロップしてもらうように)

→なんか、メッセージをだしておくだけなのに意外とめんどうでした(笑)


2.今までは文字列のスタイル(太字・斜体など)は保存できなかったので保存できるように変更。
今まではそこの部分はうまくいかないこともあって、作ってませんでした。

今回、調べてみたところblog.C#さんのFontConverterクラスを使うという部分が参考になりました。感謝です。

→リクエストしてくださった方がいたため対応しました。
実際にソフトをたくさん使ってくれている方を見つけられると励みになります(笑)

-----

しかし、いつもそうなのですが、
機能追加したり、仕様変更したりするとすると、そこで新しいバグをつくちゃったりしてないか不安です(苦笑)
(退行テストなんて全部する余裕ないですorz)

-----

他のリクエスト
コマンドラインオプションの実装・・・引数の数がすごいことになりそう+需要あるのか不明なのでしばらくは・・・(苦笑)
プレビューの自動更新・・・今度試しにプレビューの自動更新版を別途作ろうかと検討中です(笑)

Vectorにおてがる画像変換のレビューが掲載されました。うれしかったです。
いままで作った中でも実用度の高いソフトだと思うので、使ってみてください。



あと、ホームページのデザインを変更しました。
(まだ一部のページデザイン昔のままですが、比較的新しいページは随時更新していきたいと思います。)


今回のデザインは以前に比べ、シンプルにしました。以前はグラデーションの背景を使っていましたが、一部文字が見づらいのが気になっていました。
今回は完全な白背景なので以前より見やすいと思います。


今までホームページを作り、いろいろ試してきましたが、白背景が一番いいのかもしれないと思いました。画像との親和性も高いと思います。


また、メニューをFlashを使わないものにしました。
これでPDAからアクセスしても大丈夫です(そんな人いるかわかりませんが)


さらに、フレームを廃止し、CSSを使って表示するようにしました。
これでフレーム内のページにきてしまい、メニューが表示されなくて困るということが減ります。


以前の場合は解像度が高いディスプレイで見ると横に広がってしまい、まとまりのない感じでしたが、
今回は一定の範囲内にきっちりとおさまるため、まとまりがあるページとなりました。


birdsoft20070421_1.png
↑以前のホームページ。明るいデザインだが、グラデーションのせいで見づらい部分もあった。

前回の記事で書いた画像のサムネイルとHTMLコードを自動生成するソフトを改変して、画像変換ソフトを作りました。

このソフトを使うとたくさんの画像のサイズをまとめて変更することができます。
操作はこの種のソフトによくあるように、変換したい画像をウインドウにドラッグアンドドロップするだけです。

対応形式はJPEG,PNG,BMP,TIFF,GIF

また、画像のサイズを変える際の補間方法を指定できます。
NearestNeighborやBilinear、Bicubicなどを選べます
Bicubicにすると高品質のまま小さくできるのでなかなかよいと思います。

ImageConverter_0.png

前回の記事で書いた画像のサムネイルとHTMLコードを自動生成するソフトをさらにさらに改良して、操作性の向上、HTML出力機能のを強化などをしました。


CapHtml_0.png
↑かなり改良した。HTMLのリンクをはり直す処理に苦戦。


◆サンプルHTML
出力したHTMLのサンプルページ。最近撮影した春の写真(2007年版)です。
出力HTMLに手を加えていません。
写真をクリックすると拡大写真を見られます。

出力したHTMLのサンプルページその2。電卓を使い基数変換する例を作ってみました。
出力HTMLを多少変更しました。
サムネイルがあるものは画像をクリックすると元画像を見られます。

出力したHTMLのサンプルページその3。画像クリック時にLightboxを使い表示します。
サムネイルをクリックしてみてください。Lightboxに関する詳しい説明やサンプルはこちらのページをご覧ください。

このようなHTMLを比較的短時間で作ることができるのが特長のひとつです。

前回の記事で書いた画像のサムネイルとHTMLコードを自動生成するソフトをさらに改良して、FTPへアップロードする機能(簡易)もつけました。

これで

画像キャプチャ→生成された画像をボタンひとつでアップ→生成されたHTMLコードをコピペ
で以前より手軽にブログの画像をまとめて更新できるようになりました。
いつも同じ場所に画像をアップロードしている方には便利かもしれません。

また、いままで画像はPNG形式だけしか処理しませんでしたが、JPEG形式も選べるようにしました。
さらに、画面の一部をキャプチャする機能もつけました。(マウスカーソルを動かして指定する)


screencapture2_1.png
↑少し使いやすくなった。画面の一部分を簡単にキャプチャしてアップロードできる。
HTMLのコードも生成されるため、ホームページの作成支援になるかも。

私はMOVABLE TYPEを使ってブログを更新していますが、たくさん画像をアップロードする際、
ひとつづつ

1.画面をキャプチャ
2.「ファイルのアップロード」からアップロード
3.画像の横幅が大きい場合、サムネイルを作成(サムネイル作成にチェックをいれ、サイズ入力)
4.HTMLコードをコピー

をしていますが、結構面倒です。
特に画像のアップロードとリサイズが面倒なため、繰り返すのが苦痛でした。

画像をまとめて縮小FFFTPでまとめてアップロードしてもよいのですが、その場合個別にHTMLタグを書くのが面倒でした。

そこで画像のサムネイルとHTMLコードを自動生成するソフトを作ってみました
(ソフト名は仮です。)

screencapture_0.png

現在、HSPで作成中のゲーム「The Adventure Of Holy Bird」の一部をC#に移植しようかとたくらみ中です。(最近忙しいのでできるかわかりませんが^^;)

さて、このゲームの構成は以下のようになっています。
(図の「HSP」の内側の部分)

ゲームをC#で作るのにあたり、最初は全てのデータを作り直そうかと思いましたが(マップエディタもより便利なものに作り直しました)、作っていくうちに今までに作ったものも有効に活用しようと思ってきました。

gamekousei.png

今までのゲームではマップデータはバイナリでしたが、扱いが容易でデバッグが容易であるので、新しいマップデータはテキスト形式にしました。
(内容も古いものと一部異なります)

そのため、HSP製のマップエディタを改造し、マップデータをテキスト形式に変換して出力する機能をもつ「マップコンバータ」をつくり、C#のマップエディタからも扱えるようにしました。これで既存のマップデータを有効活用できます。

さらに、マップデータが増えてくるとどれがどのステージなのかわからなくなってきます。
多数のファイルを一つ一つエディタで開いて、希望のマップを探していくのは大変です。
ファイル名と内容をメモしておくのもよいですが、できればもっと楽をしたいところです。

そこでテキストのマップファイルを画像として保存して閲覧できる「マップデータ出力ツール」
を作りました。画像としてプレビューできるので以前より少し便利になりました。

さて、上図にでている敵データは今のところ変換予定はありません。
仕様をいろいろ変更予定なのでまた作り直しです。

周辺ツールの作成が面白くて「ゲーム本体」がなかなか進みません。
完成はいつになるやら・・・(苦笑)

本格的に(?)C#にはまってきました。
最近は前回紹介したマップエディタをより汎用的に作り直しています

・マップサイズの制限の撤廃(任意のサイズのマップを作成可)
・ミニマップの表示(簡易・詳細表示の二種類)
・ミニマップをドラッグで編集範囲を変更

などを加えました。
C#はネットや本のTIPSを参考にすればHSPより楽にツールが作れることがわかりました。
(ほとんど何も知らなくても大丈夫といっていいくらいです(笑))

今日もひとり言を。

Visual C#でマップエディタを作ってみました。
なぜマップエディタかというと、C#でゲームをゆっくり作成中だからです(いつ完成できるか不明)
まだ不具合もありますが、範囲選択してマップチップをコピー・切り取りして張り付けることや
「元に戻す」「やり直し」の機能をつけてみたりしました。

作ってみて思ったことは・・・やはりクラスがあると便利です。
私はまだクラスの半分も活用できていない気がしますが、それでもデータとメソッドをまとめて管理できたりするのは使いやすいと感じました。

私は今までHSPでWindowsプログラミングをしていた関係上、どうしてもHSPと比べてしまいますが、
使えば使うほどC#のほうが便利になってきました。
HSPで苦労していたことがC#ではうそのように解決します(笑)
というわけで、WindowsプログラミングはHSPからC#のほうに乗り換えようと思います^^;

前回「C#はJavaにかなり似ている感じである」と書きましたが、細かい点では違う部分も結構あるので注意したほうがいいかもしれません(苦笑)
Javaでの記述上の問題点がC#では改善されていたりします。
(例:メソッドをオーバーライドする際は明示的にoverrideを記述しなくてはいけない など)
さらに、「プロパティ」などさらに便利な機能も増えています。


MapEditorCs.png
今回C#で作成したマップエディタ
データはCSV形式で読み書きする簡単なもの。まだまだ汎用性は低い


突然ですが、Visual C# 2005 Express Edition というものがあります。
これはフリーで提供されているということ、また身近に使っている人がいて便利そうだったので
Visual C# 2005(以下VC#)をちょこっと使ってみました。

使ってみて驚いたのが
・ウインドウ(フォーム)のデザインや配置が視覚的に行える
・ボタンクリックなどの際の各種イベントの設定も簡単
ということです。

例:
・メニューバー・ツールバー・タブコントロールなどのついたウインドウ(フォーム)が簡単に作れる
・タスクトレイアイコンやバルーンチップを表示したり、なおかつタスクトレイアイコンを右クリックで簡単にコンテクストメニューを出せる


もちろんこれはVB(Visual Basic)やVC(Visual C)にもいえることかもしれません。
私はVBはやったことはありませんが、VCなら少しだけさわったことがあります。
猫でもわかるプログラミングのサイトと本を参考にしました。)

ところが、VCとVC#を比べてみると圧倒的にVC#のほうがお手軽にアプリケーションを作れるという気がしました。VCでは苦労した(またはめんどうな)ものがVC#では楽に作れてしまいます。
(右クリックでコンテクストメニューが出せてしまうところなど)

さらに文法もぱっとみた感じJavaに似ている感じで親しみがもてました。
まだC#はほとんど勉強していないですが、使いこなせたら今までより効率が大幅にアップすると思いました。(慣れればHSPよりお手軽かも??)

ということで、これからはC#使えるようになりたいと思いました。

◆C#の参考サイトへのリンク

DOBON.NET

C# Programming

C#,VB.NET入門

初めてのC# ~ 覚え書き ~

改訂版C#入門





◆シューティングゲーム2006を公開しました。
以前記事で書いたときのものにいろいろ追加したものです。
不具合の修正や無理な処理の修正も行いました。
また、隠し要素も追加しました。そのスクリーンショットの中から派手なものをを少しだけ載せておきます。


BirdShootingMini.png

開発中のSS


BirdShootingTitle.jpg

タイトル画面(クリックでゲームのページへ)

今日、とある環境でJavaを実行しようとしてUnsupportedClassVersionErrorというエラー
がでてしまいました。対処法をメモしておきます。
UnsupportedClassVersionErrorを調べたところ、

public class UnsupportedClassVersionError extends ClassFormatError Java Virtual Machine が、クラスファイルの読み込み中に、そのファイルのメジャーバージョン番号とマイナーバージョン番号がサポートされていないと判定した場合にスローされます。

とのことです。
これはJava VMのバージョンに対してできあがったクラスファイルのバージョンのほうが新しいので実行できないために起こるようです。(私の環境は現在Java1.5です)
よって、1.3など、Java VMが対応しているバージョンを指定してコンパイルすれば大丈夫です。

以下のようにコンパイル時に-source 1.3 -target 1.3を指定し、(1.3はバージョン)

javac -source 1.3 -target 1.3 hoge.java

としてコンパイルしたところ実行できました。

////////////////////////////////////////////////
注意点 (私がはまったポイント)

◆-targetのみだとエラーになる
D:\Data\Java\FrameTest>javac -target 1.3 hoge.java
javac: ターゲットリリース 1.3 がデフォルトのソースリリース 1.5 と競合しています。

◆-sourceも指定すると大丈夫
D:\Data\Java\FrameTest>javac -source 1.3 -target 1.3 hoge.java


参考:http://report.station.ez-net.jp/software/sun/java/sdk.asp

今日は軽く日記です。

最近、Javaでゲームを作っていましたがある程度完成したので公開します。
新シューティングアプレットはこちら

birdshoothing2006.png


時間がないので画像は以前作ったシューティングのものを使っています。

今回の製作の目的はオブジェクト指向の便利さを体験することです(笑)
以前作ったシューティングはオブジェクト指向などを考えずに作っていたので、
今回は以前よりパワーアップさせようと考えました。

・ここまで作ってきた感想
オブジェクト指向の便利さがよくわかりました。
オブジェクト指向はゲームを作るならかなりお勧めです。とても便利で、敵や弾などの管理が楽です。

例えば、
1.敵などのクラスをあらかじめつくっておき、そこに敵の性質などを定義しておきます。
2.ゲーム中で敵のインスタンスをどんどん生成
3.生成したインスタンスを"オブジェクトリスト"に登録しておきます。
4.ゲーム中ではそのオブジェクトリストに登録されたものを描画し、当たり判定を取ります。
5.敵が倒されたらオブジェクトリストから倒された敵を削除してそのインスタンスへの参照を切ってしまいます。これで倒された敵は描画もされず、当たり判定なども行われなくなります。
このような感じで非常に管理が楽になります。
また、移動などもJavaのうりであるポリモーフィズムとかなんとかのおかげで非常にシンプルに記述できます。

◆リンク - 参考サイト

Javaでシューティングゲームを作ろう
↑そのまんまですがかなり参考になりました。自分だけで考えてつくったら少し効率が悪くなっていたかも

68user's page
スコア送信部分で「ネットワークプログラミングの基礎知識」を参考にしました

http://www005.upp.so-net.ne.jp/aoken/
色や透明度を扱う際に、「Javaイメージアプレットを作ろう」が役に立ちました

Java Media Frameworkを活用する
BGM再生のためにJMFを使ったので参考にしました

Javaでゲーム作りますが何か?
↑爆発エフェクトのやり方が参考になりました。

今日はひさしぶりにPerlを書いてみました。最近はPerlをやらなかったのでなんだか懐かしく、忘れていることも多かったです。
さて、今回は滝雄さんから予算管理のスクリプトを書いてほしいと頼まれたので書いてみました。
デザインは滝雄さん考えたものです。以下の画像のような感じになっています。いいデザインですね。
アプリケーションとしては、おこづかい帳のように収入と支出が記録できる便利なCGIです。
個人でちょこちょtこっと予算のメモをとったり、予算の共有ができるのでいいですよ。

yosan_kanri1.png
↑メイン画面(クリックで原寸大)

yosan_kanri2.png
↑編集画面の様子(クリックで原寸大)

私はスクリプトだけを書いたのですが、さっと仕上げるつもりで一日中かかりましたorz
でも、気分転換にはよかったかもしれません。
(予算管理のスクリプトは、一般にフリースクリプトとして公開されているものがなかなかないので今回作成することになったのです。気が向いたらもう少し整理して公開するかも?)

短いですが、今日はここまで・・・。

MUSIC

| コメント(2) | トラックバック(0)

最近は忙しくてあまりゲームを作っていません。
しかし、ゲームの音楽を随時滝雄さんの作曲したものへ切り替えています。

ゲームにデモモードを追加しました。

今日はタイトル画面(メニュー画面)のデザインを変えてみました。

action_new_title.png
新しいタイトル画面のデザイン

アクションゲームの作成。
今日は、表示切り替えボタンを押したときに、ミニマップ表示がでるようにしてみました。
スクリーンショットを見てもらえばわかりますが、緑がブロックなど、通過不可能で、それ以外が通れるというものです。

minmap.png

ミニマップ表示(一部加工)

The Adventure Of Holy BirdのVer.0.6.2では、ゲームの起動を高速化しました。

アクションゲーム「The Adventure Of Holy Bird」がとりあえず一通りできたのでここでだけ公開してみます。

そろそろ完成?
アクションゲームの作成。昨日は作成がはかどりました。
最後までバグ続出。

毎日少しづつ進めているアクションゲームの作成。
今日はちょっとだけ作成です。
ブロック・敵の移動方向を変える矢印のゆかを作成
他はイベントの追加・ステージの追加。

続きは読めません "ちょっとだけ作成" »

毎日少しづつ進めているアクションゲームの作成。
今日は昨日つくったワールドマップを少し改良し、ゲーム中でマップを表示するようにしました。

最近のブログ記事

地図を作ってみました
今日はゲームで使う地図を作ってみました。…
移動可能ブロック
HSP3.0で作成中のアクションゲーム。…
The Adventure Of Holy Bird の開発環境
ブログを書き始める前のゲーム作りはどうだ…