iPhoneアプリ内で虫眼鏡機能を実装したいと思っております。
拡大元の画像の一部分を円形に拡大して表示(虫眼鏡のイメージ)したいと
考えております。
(拡大元画像の任意の点(x,y)から任意の半径rの円形範囲部分を(面積比2倍等)拡大して拡大元画像の上に重ねて表示)
虫眼鏡の拡大部分は 円形 で矩形領域ではありません。。
(円形での方法が分かりません。。)
cocos2dを利用しているためcocos2dで上記の虫眼鏡機能が実装できると
助かるのですが・・UIKitでもかまいません。
参考になりそうなサイト等でもOKです。
ご教授お願い致します。
No.1ベストアンサー
- 回答日時:
Cocos2dのことはわかりません。
Core Graphicsの話をします。円形の窓から、画像を覗くというプログラムを作りました。添付動画をご覧ください。
コードはこれです。
ViewController.m
#import "ViewController.h"
#import "MyView.h"
@implementation ViewController {
IBOutlet MyView *myView;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget: self
action: @selector(panGestureRecognizer:)];
[myView addGestureRecognizer: recognizer];
[recognizer release];
}
// Gesture Recognizer Method
- (void)panGestureRecognizer: (UIPanGestureRecognizer *)recognizer
{
if ([recognizer state] == UIGestureRecognizerStateBegan) {
[recognizer setTranslation: myView.center inView: self.view];
} else if ([recognizer state] == UIGestureRecognizerStateChanged) {
myView.center = [recognizer translationInView: self.view];
[myView setNeedsDisplay];
} else if ([recognizer state] == UIGestureRecognizerStateEnded) {
myView.center = [recognizer translationInView: self.view];
[myView setNeedsDisplay];
}
}
@end
#import "MyView.h"
@implementation MyView
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(context, rect);
CGContextClip(context);
CGImageRef image = [[UIImage imageNamed: @"sample.png"] CGImage];
CGContextScaleCTM(context, 1.0, -1.0);
CGContextTranslateCTM(context, 0.0, -(CGFloat)CGImageGetHeight(image));
CGContextDrawImage(context, CGRectMake(-(self.center.x - self.frame.size.width / 2.0),
(self.center.y - self.frame.size.height / 2.0),
(CGFloat)CGImageGetWidth(image), (CGFloat)CGImageGetHeight(image)), image);
}
@end
このプログラムをあれこれいじれば、お望みの虫眼鏡になっていくのではないかと思います。
お返事いただきありがとうございます。
円形領域内に拡大元画像を2倍にしたテクスチャを貼っているのか
灰色の矩形領域の一部円形領域だけ透過されているテクスチャをサンプル画像の上に
表示しているのかを不勉強ながらまだ判断できておりません。。
このプログラムを実行・改変・確認させていただきました上で
虫眼鏡のようにできそうか否かでベストアンサーか否かをつけさせていただきますね。
こちらの説明不足ですみません・・。
プログラムや分かりやすい動画までつけていただきありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
拡張子php画像をjpg画像等に変...
-
FTP サーバーにある画像を表示...
-
PHPで吐き出した画像にリンクを...
-
透過PNGが透過されない!!
-
VBAでJPGサイズ変更
-
C# Excelファイルへの画像挿入。
-
imageCreate関数を使用せずに...
-
VBSの「MsgBox」について
-
PHPのif文でその処理を途中で抜...
-
<A href ~ と一緒に値を渡すには
-
3つ以上の論理積は利用可能なの...
-
「クラス関数」「メンバ関数」...
-
PHPで新しいウインドウで開く命...
-
phpと<?xml version="1.0" enco...
-
fopenでファイルが開かない場合...
-
VB.NETでフリーメールアドレス...
-
print出力での文字制限について
-
PHPファイルの中身が見られるこ...
-
PHPで偶数と奇数を判断するには
-
PHP4、PHP5 1ファイル複数クラ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの「MsgBox」について
-
透過PNGが透過されない!!
-
拡張子php画像をjpg画像等に変...
-
Illustratorで文字と画像を流し...
-
VBAでJPGサイズ変更
-
手作業で埋め込んだ、UserForm1...
-
PythonのTkinter詳しい方へ。画...
-
「imagejpeg」(GD)で作成した...
-
GDI+を使ったビット数とDPIの扱い
-
php,mysqlにて画像パス保存/表...
-
PHPで吐き出した画像にリンクを...
-
【PHP】画像が表示されず「×」...
-
Macのxamppでの画像表示について
-
ビットマップ画像を読み込むプ...
-
ListViewコントロールでサムネ...
-
Webbrowser上に表示した画像を...
-
PHPのGDライブラリについて
-
pictureboxに表示した画像のフ...
-
GDの画像変換でサーバーに負荷
-
C#とJavaで、MP3タグの画像を表...
おすすめ情報