- 締切済み
配列
c++builderで二次元配列をしています。 a[1][1]="あ" a[2][1]="い" といったように文字を配列に割り当てることは出来るのできます。 しかし、この配列に画像を割り当てる方法がわかりません。 どうしたらよいでしょうか、教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★補足に付いて回答。 ・最初にこの質問は最終的に何を行いたいのでしょうか? 今やりたいことはビットマップのイメージ内容を変数に代入したいようですが その後にウインドウに描画(表示)したいのですか?それともアニメーション? ・回答者 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 でのプログラミング』で『お絵描きソフトを作ってみる』が あります。あまり詳しくないけど。 ・以上。参考にどうぞ。
- zwi
- ベストアンサー率56% (730/1282)
>ただ、もともとあるビットマップイメージを >割り当てたいだけなのですが。 >初心者過ぎてすみません。 グラフィックの表示ですが、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)
Oh-Orangeさんじゃないですが、まずグラフィックを表示するために使用する予定のライブラリ、APIを教えてください。 (1)WindowsAPI (2)DirectX (3)DXライブラリ等のグラフィックライブラリ。 (4)よく分からない。 (5)その他。その場合は名前を教えてください。 ちなみに、 a[1][1]="あ"; a[2][1]="い"; でエラーでない型宣言は、 char *a[3][2]; ですが同じですか? 違っていたら、どんな型宣言をしていたか教えてください。
補足
回答ありがとうございます。 (4)です。 型宣言はchar型です。 ただ、もともとあるビットマップイメージを 割り当てたいだけなのですが。 初心者過ぎてすみません。
画像の場合はもっと沢山の文字を格納する感じになる HTMLのような a[3][1]="<img src=xx.jpg>" という形ではない。 ファイル操作を行い読み込まなければならない。
- Oh-Orange
- ベストアンサー率63% (854/1345)
★画像は割り当てられないです。 ・画像のパス名か、画像データの内容を char 型の配列に入れるなら出来ますけど。 >しかし、この配列に画像を割り当てる方法がわかりません。 ↑ 意味が良く分かりません。 何がしたいのですか? ・以上。補足要求です。
補足
回答ありがとうございます。 画像は割り当てられないのですか・・自分が間違っていたようです。 「画像データの内容を char 型の配列に入れる」 ↑この場合どうやって記述するのでしょうか。 初歩的過ぎかもしれませんが、教えていただければ幸いです。
お礼
回答していただいた皆さんありがとうございました。 何か質問の内容が変わったようなきがするので、 具体的に書いてもう一度質問したいと思います。 ありがとうございました。