2012年01月06日

アンドゥその2

よく考えたらファイルを読み込む時の処理をアンドゥのログに入れてなかった。アンドゥで読み込み自体がなかったことになって、前の画像の上からそのまま筆跡が再生されてしまった。アップデートする前に気づいて良かった。

読み込んだ、という事をログに残しておけばいいんだけど、ファイル名だけってのはちょっとまずい。アンドゥする前に画像を上書きしたら結果が変わるし、削除してたら読み込みエラーになる。

しょうがないのでここだけ鳳雛の時と同じ、ビットマップデータ自体をログに埋め込む方式にした。ちょっと使用メモリは増えるけどしょうがない。

保存のアンドゥは”今開いてるファイル名”が保存前の戻るけど、保存したファイル自体は元に戻らない。これも鳳雛と同じ。原理的には戻すことも出来るんだけど、他のソフトの感覚と違うし、他のアプリからアクセスされると結局完全な制御はできないので。

変なところでめんどくさかったのが、保存や読み込みで名前が変更された後、それをタイトルバーに反映させる処理。アンドゥ対応にともないってファイルアクセスも描画用スレッドにうつしたら、そこからタイトルの変更が出来なくなった。AndroidのGUIはシングルスレッド用だから、別スレッドからのアクセスが無条件に弾かれる。

色々調べて回った結果、android.os.Handlerというのを使って、描画用スレッドからさらに別のスレッド(メインスレッド)呼び出す感じで書けば大丈夫だった。

これを除けばマルチスレッド処理はわりとうまくいっている。鳳雛の時は太いブラシだと線がカクカクしたけど、うなペイントだとそれは起きない。線が遅れて引かれる感じにはなるだけで筆跡に影響が出にくい。元々1コアしかないCPUだとスレッド切り替え処理の分遅くなるかもしれないけど。

鳳雛作った時はシングルコアのPCだった気がする。だからマルチスレッド対応という選択肢がそもそも頭になかった。あれは一体何年前になるんだろう。今では携帯電話までマルチコアが標準になってきてる。

あの頃からするとずいぶんプログラムの環境が進化した。ジェネリクスのリストとかキューとか、今では特に珍しくもないものだけど、あの頃を思い出すと拝んでしまうレベル。

posted by kuribo at 04:01| Comment(0) | TrackBack(0) | デジタル>Android | このブログの読者になる | 更新情報をチェックする

2012年01月05日

アンドゥ

アンドゥ機能が搭載できた。

鳳雛の時は差分をビットマップで保存してたけど、今回はビットマップ1枚とそこからの筆跡データの記録から再現する方式にしてみた。

つまり、30回アンドゥ出来るとして、1回アンドゥボタンを押すと、まず元ビットマップで完全上書き、その後過去の筆跡から29回分を表示する。もう1回アンドゥボタンを押すと同じ手順で28回分。

メリットはメモリが節約出来る事。ビットマップと違って斜めの線だからといって容量が膨らむこともない。回数を増やしても描く処理は同じで遅くならない。

デメリットは、筆跡の再描画処理が重たかったり、筆跡の記録数が多いとアンドゥ処理に時間がかかる事。アンドゥの最大数が多いほど重たい。あとはアンドゥの最大数を超えると、筆跡ログの先頭を元ビットマップに書きこんでから捨てる処理が要る。

リドゥも当然できるけど、アンドゥの途中で何か描く(タッチしてしまう)と、それ以後のリドゥができなくなる。これは鳳雛でもあった問題点。ログが枝分かれする様にすれば対応出来そうだけど、操作や内部処理が複雑になって、結局いい感じの仕組みが思いつかなかった。

次は内部処理のDIB化の予定。

BitmapからgetPixelsでint配列が取り出せるのは知ってたけど、そのつどsetPixelsで戻すのは気持ち悪いと思ってたけど、int配列を直接drawBitmapで表示出来る事がわかった。これなら常時int配列でいいから高速化出来そう。

これが上手くいくとレイヤー的な事も出来る。今の状態だと色変更処理いれてもまともに塗れないけど、ペンを離すまで同じ濃度で塗りつぶせれば、手書きブログ的な塗り方なら出来るようになるはず。

あとはちゃんとした消しゴム処理も。今の消しゴムは白で塗ってるだけだから、背景が見えるようになったりはしない。

速度の問題があるから何でもかんでもはできないけど、何かしら特徴的というか、笑いの取れる機能を盛り込んでおきたい。

posted by kuribo at 02:57| Comment(0) | TrackBack(0) | デジタル>Android | このブログの読者になる | 更新情報をチェックする

2011年12月22日

地味なアップデート作業中

公開して数日は誰1人としてダウンロードしてなかったので心配になったけど、何人か使ってくれたようなので一安心。

設定画面を開かないと鉛筆消しゴムの切り替えができないのはやはり使いにくかったので修正。広告と別にツールバーを作ったので絵に使える領域が少し小さくなったのと、解像度の低い機種だと邪魔かも。一応ペン使わない人はペン関係のボタンが消えるから多分大丈夫だと思うんだけど。

それとファイルの読み込みと名前を付けて保存する機能。なくてもいいかと思ってたけど、そうすると紹介用のスクリーンショットを撮るのが大変な事がわかったので搭載。

このあたりで一区切りして、しばらく動作確認してからアップデート予定。出来れば英語版もその時に。

あとはやっぱり着色もできた方がいい気がする。もともと内部的にはフルカラービットマップ扱いだし、処理速度が遅くなるわけでもない。インターフェースさえなんとか出来れば問題なさそう。

アンドゥは使用メモリと処理速度の折り合いがつけば、という感じ。ニーズに合わせてオンオフ出来る形にすればいいかも。

posted by kuribo at 18:13| Comment(0) | TrackBack(0) | デジタル>Android | このブログの読者になる | 更新情報をチェックする

2011年12月10日

うなペイント公開

なんとか登録できた。

https://market.android.com/details?id=net.seesaa.unauangi.unapaint

お絵描きソフトとしては低機能だけど、ThinkPad Tabet使ってる人ならそれなりに使えると思う。

仕様を聞く限りではGalaxyNoteとEeePad Memoでも使えそう。ただこの2機種、日本では販売されてないみたいで、輸入品のみ。だから実質的にThinkPad Tabet専用のお絵描きソフト。これ持ってる人が何人居るのかわからないけど…

ふつうに指でも使えるし、指5本使って絵描けるアプリもわりと珍しいんだけど、それだと鉛筆と消しゴムの切り替えが厳しい。わかってはいるんだけど、Androidのインターフェース作成が思ったより難しい。

国内だけじゃあんまり使う人いなさそうなので、英語表示にも対応する予定。

ThinkPad TabetにAndroid4.0へのバージョンアップが出れば、4.0以降専用版として高機能版を出して、ペンのサイドスイッチにも対応したい。

posted by kuribo at 18:27| Comment(0) | TrackBack(0) | デジタル>Android | このブログの読者になる | 更新情報をチェックする
最近のトラックバック