2012/08/27

tibar image ovarlay patch

http://code.google.com/p/tibar/

iPhone でバーコードを読ませたいと思ったとき、いくつかライブラリはあったりするが、読み取り精度やコードの安定性とかを見たところ、ZBar SDK が一番良いと感じた。これを Titanium Mobile から使うモジュールが tibar である。

tibar のサイトや、日本語の情報を見ていると、Titanium Mobile 1.4 から 1.8 あたりまでしか動作事例がみあたらなかったのだが、最新の svn コードを試した限り、2.0.1GA2 でのビルドと動作は少なくとも確認できた。

1. 以下のコマンドで最新コードをチェックアウトする

svn checkout http://tibar.googlecode.com/svn/trunk/ tibar-read-only

2. titanium.xcconfig のバージョン指定を、使用している Titanium Mobile のバージョンに置き換える
===================================================================
--- titanium.xcconfig   (リビジョン 17)
+++ titanium.xcconfig   (作業コピー)
@@ -4,9 +4,8 @@
 // OF YOUR TITANIUM SDK YOU'RE BUILDING FOR
 //
 //
-TITANIUM_SDK_VERSION = 1.5.1
+TITANIUM_SDK_VERSION = 2.0.1.GA2

3. build.py を実行

一応上記でビルドでき、組み込んだら動いたのだが、画像を以下のようにカメラの表示にオーバーレイさせたいと思ったときに、公開されているコードだとうまくいかなかった。












patch が貼られていたりしたものを試したのだがそれもうまくいかなかったので、自分で以下のような patch を書いた。設定されるオブジェクトが ImageView であることを前提にしているので、画像以外のオーバーレイ用途にはうまくいかない。それに overlay キーが設定されていないと問答無用でエラーにしているので、その点もとても汎用的とは言えないだろう。使用は自己責任で。

Index: Classes/TibarModule.m
===================================================================
--- Classes/TibarModule.m (revision 17)
+++ Classes/TibarModule.m (working copy)
@@ -257,6 +257,36 @@
[pickerCancelCallback retain];
}
+ // overlay view
+ if ([args objectForKey:@"overlay"] != nil)
+ {
+ NSString *overlayPath = [TiUtils stringValue:[args objectForKey:@"overlay"]];
+
+ NSData *dt = [NSData dataWithContentsOfURL:
+ [NSURL URLWithString:overlayPath]];
+ UIImage *image = [[UIImage alloc] initWithData:dt];
+ UIImageView *iv = [[UIImageView alloc] initWithImage:image];
+
+ UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0,0,320,480)];
+ [view addSubview:iv];
+
+ CGRect newBounds = CGRectMake(0, 0, 320, 480);
+ CGPoint newCenter;
+ newCenter.x = 160;
+ newCenter.y = 240;
+ [view setBounds:newBounds];
+ [view setCenter:newCenter];
+ reader.cameraOverlayView = view;
+
+ } else {
+ if (pickerErrorCallback!=nil){
+ id listener = [[pickerErrorCallback retain] autorelease];
+
+ NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
+ [self _fireEventToListener:@"error" withObject:dictionary listener:listener thisObject:nil];
+ }
+ }
+
// show
TiApp * tiApp = [TiApp app];
[tiApp showModalController:reader animated:YES];

0 件のコメント: