地図データのような大きな画像を表示するには

解決


Jun2013  2013-12-10 22:34:22  No: 45704

DelphiXE5 Enterprizeです。
Windows,Android,iPhoneなどで地図情報などの大きな画像を
表示するソフトがあります。
クリックしたまま上下左右にマウスを動かすなどの操作で
表示できていない部分が次々とほぼ無限の量で表示できます。
単純に考えると、画像のサイズの制限から大きな画像1つを扱う
だけではできないのではないかと思います。

こういったことをDelphiで実現する方法は、あるのでしょうか?
元の画像はBitMapで考えています。


igy  2013-12-11 18:29:45  No: 45705

□が1つの画像として、

□□□□
□□□□
□□□□
□□□□

のような感じで分割して並べて表示するのは、いかがですか?


Jun2013  2013-12-11 22:35:35  No: 45706

igyさん、早速の返答ありがとうございます。

説明が拙く申し訳ありません。

画像は分割されていて、

┏━┳━┳━┳━┓
┃1┃2┃3┃4┃
┣━╋━╋━╋━┫
┃5┃6┃□┃8┃
┣━╋━╋━╋━┫
┃9┃10┃11┃12┃
┗━┻━┻━┻━┛

とあるとします。12個の画像を一つにするとサイズが
大きすぎて表示できません。(実際は12個ではなく何百、何千だから)
今7の画像の一部(□の中)が画面表示されているとします。
マウスなどの操作にて、□が複数の画像にまたがる部分になった場合、
どのような処理をしたらよいのかというのがテーマなのです。

4個までの画像を表示できる環境(ソフト・ハード)があった場合
7、8、11、12をくっつけて画像表示し、□が6にかかったら、
6,7、10、11をくっつけて画像表示するという方法が一般的(?)
なのでしょうか?

画面(TImageか?)のLoadでちらつきは避けれないと思うのですが、
Map関連のアプリを操作するとちらつきがないのでやり方が違うのかなと
感じています。


deldel  2013-12-11 23:44:49  No: 45707

色々なアイデアがあると思いますが、まずは簡単な例から。
TImageのサイズは
┏━┳━┳━┓
┃1┃2┃3┃
┣━╋━╋━┫
┃4┃□┃6┃
┣━╋━╋━┫
┃7┃8┃9┃
┗━┻━┻━┛
とし、このとき、画像は1〜9の9つのファイルから読み込んだとする。

左にフリックして6が中心に来たとする(TImageの単純な移動)。
裏にもう一個TImageを用意しておき、
┏━┳━┳━┓
┃2┃3┃A┃
┣━╋━╋━┫
┃5┃6┃B┃
┣━╋━╋━┫
┃8┃9┃C┃
┗━┻━┻━┛
と読み込み、MouseUpイベントで表側のTImageと入れ替える。

実際は半分だけフリックするとかが考えられますが、
それは、色々、考えましょう(^^;
(入れ替えるときに移動距離を考慮してずらした状態で表に出すとか?)


Jun2013  2013-12-13 01:32:11  No: 45708

deldelさん、アイデアありがとうございます。

一度のフリックが終了したとき、その時点でのTImageで保持表示している
イメージの範囲を超えることはないようにします。
(これは機能的に範囲外になることはないと思われますし)
これにより、2つのTImageを使って、画像の保持内容の変更と表示を
切り替えることで出来るかもしれません。
試してみることにします。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加