VB6で画像をアフィン変換する方法

このQ&Aのポイント
  • VB6で画像を回転させて奥行き方向に倒した画像を出力するプログラムを作成したいです。具体的な処理は、指定した画像を読み込み、90度回転させ、奥行き方向に70度傾け、出力します。このプログラムにより、斜め上から眺めているような状態をシミュレートできます。
  • VB6以外のバージョンや他のプログラミング言語で同様の処理を行った経験がある方、またはアフィン変換の具体的なコードを知っている方、ご教示いただけませんか?具体的なコードがあれば、じっくりと学習したいと思います。
  • VB6を使用して、画像をアフィン変換する方法について教えてください。具体的な処理や参考資料があれば、教えていただけると幸いです。
回答を見る
  • ベストアンサー

VB6で画像をアフィン変換したいです

VB6で画像をアフィン変換したいです 現在,入力した画像を回転させて,さらに「奥行き方向に倒した」画像を出力するというプログラムを作ろうと思っています。 このプログラムでは,以下の処理により,1つの入力画像から4つの出力画像を作ります。 ・ドラッグ&ドロップで画像名を指定 ・ボタン押下で以下を4回繰り返す >・指定名の画像を読み込む >・90度回転させる >・奥行き方向に70度傾ける >・出力する(元の画像名+通し番号) これにより,「ある画像を上下左右さまざまな方向に向けて,それぞれを斜め上から眺めている」という状態をシミュレートしたいと考えています。 イメージは,添付の画像をご覧いただけますと幸いです。 これを行うには,画像の回転とアフィン変換を行えば良いようなのですが,具体的にどのようにすればよいのかを掴みかねております。 そこで,どなたか似たような処理を行ったことがある方,もしくは上述の処理をどのように行えばよいのかご存知の方がいらっしゃいましたら,お教え願えないでしょうか。 また,大変厚かましいお願いですが,できれば具体的なコードを教えて下さいますと大変有り難いです。もちろんすぐにとは申しません。じっくりと回答をお待ちしたいと思います。 なお,使用している環境はVisual Basic 6.0ですが,具体的なコードをお教え願えるのであれば,VBの他のバージョンでも結構です(ActionScriptやCも多少であれば使えます)。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

回転関係はあちこちでサンプルがあると思います。 http://hanatyan.sakura.ne.jp/vbhlp/kaiten2.htm 確か「一発角度変換」を行ってくれるAPIもあったはずです。 ただしWin95系OSでは通らなかったのかな? 何という名前のAPIだと通らなかったかまでは、、、すいません、、、記憶薄いです。。。 私は奥行き画像描画をやったことがありませんが、Cでソースを公開されている方がいらっしゃいました。 http://www13.plala.or.jp/kymats/program/program_picture.html 「画像」「台形」「変換」とかのキーワードを利用すると、もうちょっと出てきそうですね。 「DirectXがウニャウニャ~」と言われている他の掲示板の方もいらっしゃいましたが、結局その方は細かい事を述べられていなかったので、どのようなDirectXのAPIを使用したらよいかまではわかりませんでした。 でもDirectXなら一発台形変換はあるかもですね~

Caryo_t
質問者

お礼

ご回答ありがとうございます。 一発角度変換をするDirectXとAPIですか。それは使えそうですね。 理想的には一行一行の原理がわかっている方が良いのかもしれませんが, 現在の私の状況は,使ってみてから解読していくという方法のほうが現実的なので,ご紹介いただいたキーワードも踏まえつつ,一度探してみることにいたします。 ありがとうございました。 なお,申し遅れておりましたが,私のOSはXPのsp3もしくはVistaです。

その他の回答 (2)

回答No.3

「台形」ってよく考えてみたら、「平行四辺形」の一つのパターンですよね。 それで調べてみたら、角度一発変換のAPIもわかりました。 「PlgBlt」です。 これが95系では動かないAPIです。 その関連で調べると、 http://tokovalue.web.infoseek.co.jp/PlgBlt_U.htm っていうところにたどりつきました。 ってかモロこれ? 今度こそ発言最後ですw

Caryo_t
質問者

お礼

重ねてのご回答ありがとうございます。 なるほど,これはNT系でしか動かない可能性があるのですね。 私のOSはXPですので,使えそうです。 このAPIであれば,回転を簡単に行うことができそうですね。 ただ,遠近を表現するためには,単に台形にするだけではなく,手前のものを大きく,奥に行くほど小さく描画する必要があるので,このAPIに一工夫必要かもしれません。 本当に,何度もありがとうございました。 いずれにいたしましても,あと少し質問を残させていただいてから,締め切らせていただこうと思っております。

回答No.2

前回回転について、直接ページにリンクを張ったけど、こっちの方からIndexがあるので、いろいろな方法が見れますね。一応念のため。。。 http://hanatyan.sakura.ne.jp/vbhlp/gra_index.htn.htm あと思いだしたのですが、「窓立て2」というソフトが、似たような機能を持っている事を思い出しました。 http://www.forest.impress.co.jp/lib/image/madotate2_r.jpg 作者のページに行ってみると、Borland C++でのソースを公開しておりました。 http://www.ksky.ne.jp/~seahorse/mtate2/ あとは私は経験が無いため、よくわかりません。

Caryo_t
質問者

お礼

重ねてのご回答,ありがとうございます。 「窓立て」,拝見しました。 確かに画像(ウィンドウ)を奥行き方向に倒すという点は,私の求めるものでした。 ただ,ここまで高機能だとやはりコードも難しいため,私の付け焼刃なCの知識では太刀打ちできませんでした。せっかくご紹介いただいたのに,すみません。 もし,角度変換が一発でできるAPIを思い出されましたら,またご教授いただけますと幸いです。 ありがとうございました。

関連するQ&A

  • アフィン変換と領域分割

    アフィン変換やCGなどにお詳しい方がおられましたらお手数ですが下記質問にご回答をいただけないでしょうか? 大きな入力画像を小さな画像に領域分割してアフィン変換により拡大・回転処理を行いたいと考えています。 方法として、例えば256×256の画像を128×128の画像に2×2の領域分割(左上A,左下B,右上C,右下D画像)して各128×128画像についてアフィン変換を行い2倍の拡大処理を行う事を考えました。 しかし、ここで疑問がでてきました。2倍の拡大処理を行う場合、出力画像から入力画像の座標位置を算出しないとマッピングされない画素ができてしまう為、画像Aをアフィン変換する際に入力画像の4頂点よりアフィン変換で出力画像の4頂点を算出してその算出点より逆変換を開始してしまうと、画像Aと画像Bとの間にマッピングされない箇所ができてしまうと考えております。 CGの世界ではテクスチャマッピングとして各テクスチャをアフィン変換などでマッピングしているようですが、この技術を使い大きな画像を小さなテクスチャとして扱いマッピングできないかとも考えたのですがその場合も上記問題と同じ問題がでてきてしまいます。 そもそも大きな画像を小さな画像に分割してアフィン変換を行うという事は不可能なのでしょうか?

  • アフィン変換後の画像に線が入ってしまいます。

    C++でアフィン変換を行うプログラムを作成しました。 プログラム自体は回ったのですが、変換後の画像に線が入るようになりました。 これは一体何なのでしょうか?普通出るものなのでしょうか? プログラミングが何か間違っているのか、どうしても出てしまうものなのか、また出ないようにするにはどうしたら良いか等、教えてください。 変換後の画像にフィルタをかけて消す方法も考えましたが、あまりに画像がぼけてしまうので、最初から出ないようにする方法があれば教えていただけると幸いです。

  • VB6.0からVB2010へ変換

    10年ほどプログラムから遠ざかっておりまして、事情により以前作成したプログラムを動かすことになりました。そこで、VB6.0のプログラムをVB.NET系へ変換できることを聞いたのですが、その方法がわかりません。具体的にはどうすればよろしいのでしょうか。変換したいのは、VB6.0→VB2010です。よろしくお願いいたします。

  • カメラ画像のアフィン変換について

    カメラの特性と画像処理にお詳しい方にお伺いします。 カメラを使ってある風景Aを撮影して、そのカメラ位置を保持しながら後ろへ数m下がって、同じ風景Bを撮影します。2枚の画像A,Bを比べると、視差がある為、画像中心から外へ広がるほど相対的な歪が大きくなっていきます。この時、画像Aにアフィン変換Fによる画像処理を施して歪を無くし、画像Bを拡大したものがほぼぴったり画像Aになるようにしたいのです。(u,v)=F(x,y)の関数F、若しくはその導出の仕方を教えてください。よろしくお願いします。

  • 数学演算のサンプルコード集のあるサイトを探しています(VB6)

    VB6で数学演算のソースコードのサンプル集を探しています。 例えば今回は3次元のベクトルをX,Y,Z軸周りに任意の角度だけ回転する行列をプログラムしたいので、アフィン変換のサンプルなんかないかと探しています。いいサイトがあれば教えていただけませんでしょうか。 よろしくお願いします。

  • VBでお絵かきソフトを作っています…

    よろしくお願いします. タイトルにも書いたんですが…VBでお絵かきソフトを作っています.ほとんど出来上がったんですが,画像の拡大・縮小処理をさせるのに困っています. アフィン変換と補間法を利用して拡大・縮小処理を行います.まず画素の色をコピーすることからやりたいと思っています.持っている本を手当たり次第に読んだんですが…プログラムがかけません. 例えば,(a,b)の座標の色を読み込む場合にどうしたらいいのでしょうか…その色を拡大・縮小後の(A,B)の座標にコピーするのはどうしたらいいのでしょうか…教えてください. さらに,ヘルプを使ってみたんですが、「MSDNをインストールしてください」って出ます…MSDNっていうのもわかりません.初歩的なことかもしれませんが…教えてください

  • VB.NETをJavaに変換するツールについて

    .NET環境でプログラムされたVBをJavaに変換できるツールを探しております。ご存知の方がいらっしゃいましたらツール名を教えてください。VB6をJavaに変換するツールは対象にしておりません。

  • VB.NETでの画像処理について

    初めて書き込みます。 現在VB.NETと画像処理を勉強中です。 最終的には、画像を取り込んで画像の被写体の縦と横の長さをVB.NETから求めるのが目的です。 現在画像の色情報から輝度を求め、その画素数をカウントしてヒストグラムを求めるところまでは、おぼろげながら理解できています。しかし、画素数をカウントし縦と横の長さを求めるプログラムの作り方がわかりません。 解る方がいましたらぜひおしえてください。 ※画像処理についてですが、プログラムが関わっているので書き込みました。カテゴリーが違っていたらすいません。

  • フォルダごと画像変換ソフト(変換後も同じ構成)

    フォルダが複数あって、フォルダごとに画像を変換するソフトはあるのでしょうか? (変換後もフォルダ構成は同じで、 変換後のフォルダは変換前と同じフォルダ場所ではなくて、 指定したディレクトリ以下) つまりフォルダ内の画像を一括変換したいのですが、同じフォルダに出力してしまうと、 同じ画像のデータが混在してしまうので、 指定したディレクトリ以下に出力したいのですが。

  • DLLの登録をVBで行いたい(VB2005)

    いつもお世話になっております。 VB2005で開発しています。 DLLを登録するときに、コマンドプロンプトから regsrv32 ファイル名.dll と実行すると思います。 これをVBから行いたいのですが、何か良い方法はございませんか? 具体的には、VBでレジストリ登録するファイルの一覧を出力して、 それをレジストリ登録したいのです。 VBとバッチを組み合わせれば、実現可能なのですが、 ファイルを2つに分けたくないので、VBだけで処理できないものかと 思いました。 コマンドプロンプトで実行するコマンドをVBから同じように実行できれば良いのですが・・・ もしよろしければ、ご教示ください。 よろしくお願い致します。

専門家に質問してみよう