• 締切済み

配列

c++builderで二次元配列をしています。 a[1][1]="あ" a[2][1]="い" といったように文字を配列に割り当てることは出来るのできます。 しかし、この配列に画像を割り当てる方法がわかりません。 どうしたらよいでしょうか、教えてください。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★補足に付いて回答。 ・最初にこの質問は最終的に何を行いたいのでしょうか?  今やりたいことはビットマップのイメージ内容を変数に代入したいようですが  その後にウインドウに描画(表示)したいのですか?それともアニメーション? ・回答者 No.3 さんの補足を読むと Windows プログラミングは経験が無いみたいですね。  単純に既存のビットマップをウインドウに描画(表示)するだけなら2次配列に  イメージ内容を読み込まなくても LoadImage() または LoadBitmap() という Win32 APIの  関数を使って読み込みます。すると戻り値に HBITMAP というハンドルを返しますので  これを使って簡単に BitBlt() 関数などで描画(表示)できます。  なお HBITMAP ハンドルにはビットマップのイメージ内容が既にメモリ内に読み込まれています。  別に2次配列に入れなおす必要も無いです。この『ハンドル』を利用すれば良いので。 ・下に単純に読み込むだけのサンプルを載せておきます。 サンプル: LPCTSTR lpPath = TEXT("C:\\…\\sample.bmp"); ←ファイル名 HBITMAP hBmp; if ( (hBmp = LoadImage(NULL,lpPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)) == NULL ){  /* ビットマップのファイルが読み込めないエラー(存在しないとか) */ } else{  /* 読み込めたらここで描画処理 */ } ちなみに: HANDLE LoadImage(  HINSTANCE hinst, // インスタンスのハンドル  LPCTSTR lpszName, // イメージの名前または識別子  UINT uType, // イメージのタイプ  int cxDesired, // 希望する幅  int cyDesired, // 希望する高さ  UINT fuLoad // ロードのオプション ); その他: ・上記の API 関数で簡単に HBITMAP ハンドルに読み込めます。  読み込んだハンドル(メモリ)をプログラムの終了前に破棄して下さい。  破棄の仕方は『DeleteObject( hBmp );』の1行で良いです。 ・描画するときには  (1)描画するデバイスコンテキストを取得  (2)CreateCompatibleBitmap() で(1)と互換のあるメモリデバイスコンテキストを作成  (3)SelectObject() で (2) に HBITMAP のハンドルを関連付ける  (4)BitBlt()、StretchBlt() などで描画  こんなステップになります。 ・とりあえず開発環境(OS)、グラフィック環境(Win32 API、DirectX、OpenGLどれ)を  お聞きしたいですね。回答者 No.3 さんの補足で分からないとなっていますが  これが分からないと上記のように勝手に Windows プログラミングだと決め付けて  回答しちゃいますよ。私は。これであっていれば良いが…。 ・その他は下の『参考URL』の『C+API』を読みましょう。  一番下には『C++ Builder でのプログラミング』で『お絵描きソフトを作ってみる』が  あります。あまり詳しくないけど。 ・以上。参考にどうぞ。

参考URL:
http://www.sm.rim.or.jp/~shishido/windows.html
roki321
質問者

お礼

回答していただいた皆さんありがとうございました。 何か質問の内容が変わったようなきがするので、 具体的に書いてもう一度質問したいと思います。 ありがとうございました。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>ただ、もともとあるビットマップイメージを >割り当てたいだけなのですが。 >初心者過ぎてすみません。 グラフィックの表示ですが、c++builderにはVCLがあったのを思い出しました。それを使うのがセオリーだと思いますので、それを使いましょう。 で、c++builderのVCLは専門外なのでサイト紹介しかできません。 http://www2.ttcn.ne.jp/~tkky/index.htm http://ww4.tiki.ne.jp/~yonyon/programing/bcb/lecture.htm 参考になれば良いんですが。 「C++ Builder / Turbo C++ 質問の木」 http://gimite.net/bcbqtree/qtreemain.cgi というのもありますから活用してください。 >型宣言はchar型です。 文字列"あ"は、charのポインタ型にしか代入できません。 基本的なC言語の文法も勉強不足かな?本をもう一度読み直してみましょう。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.3

Oh-Orangeさんじゃないですが、まずグラフィックを表示するために使用する予定のライブラリ、APIを教えてください。 (1)WindowsAPI (2)DirectX (3)DXライブラリ等のグラフィックライブラリ。 (4)よく分からない。 (5)その他。その場合は名前を教えてください。 ちなみに、 a[1][1]="あ"; a[2][1]="い"; でエラーでない型宣言は、 char *a[3][2]; ですが同じですか? 違っていたら、どんな型宣言をしていたか教えてください。

roki321
質問者

補足

回答ありがとうございます。 (4)です。 型宣言はchar型です。 ただ、もともとあるビットマップイメージを 割り当てたいだけなのですが。 初心者過ぎてすみません。

noname#39970
noname#39970
回答No.2

画像の場合はもっと沢山の文字を格納する感じになる HTMLのような a[3][1]="<img src=xx.jpg>" という形ではない。 ファイル操作を行い読み込まなければならない。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★画像は割り当てられないです。 ・画像のパス名か、画像データの内容を char 型の配列に入れるなら出来ますけど。 >しかし、この配列に画像を割り当てる方法がわかりません。  ↑  意味が良く分かりません。  何がしたいのですか? ・以上。補足要求です。

roki321
質問者

補足

回答ありがとうございます。 画像は割り当てられないのですか・・自分が間違っていたようです。 「画像データの内容を char 型の配列に入れる」  ↑この場合どうやって記述するのでしょうか。 初歩的過ぎかもしれませんが、教えていただければ幸いです。

関連するQ&A

専門家に質問してみよう