こんにちわ、Visal Studio 2005(C++)のフォームアプリケーションでプログラミングしているものです。LoadImage関数を使って、読み込んだ画像を指定のサイズにリサイズ?したいのですが、LoadImage関数の使い方がよくわかりません。『プログラム上で画像作成』という質問とほぼ質問内容がかぶっているのですが、そちらの回答を見て実効してもうまくいきません。
そちらで書いてあることは、たとえばピクチャーボックスに画像を表示させたい場合なのですが、
pictureBox1->Image = ::LoadImage(file/*ファイル名*/,x/*指定したx座標*/,y/*指定したy座標*/);
といった感じでできるらしいのですが、::の後にLoadImageがでてきません。これは何かこの記述をする前に、さらに記述が必要なのでしょうか?
その後には、プロパティを開いて共通言語ランタイムサポートを「共通言語ランタイムサポート(/clr)」に設定すればできるとも書いてありますができません。
お分かりの方がいましたら回答お願いします。
No.5ベストアンサー
- 回答日時:
FormのPaintイベントに描画コードを記述するのであれば
this->Invalidate();
などで フォームの再描画を促さなくてはいけません
pictureBox1->Invaliedate();
を実行するなら PictureBoxのPaintイベントを記述しましょう
大きさを変更した画像を保存するには
保存用のBitmapオブジェクトが必要です
Bitmap ^bmpsave = gcnew Bitmap( 200, 200 );
Graphics ^gSave = Graphics::FromImage( bmpsave );
gSave->DrawImage( b, 0, 0, 200, 200 );
delete gSave;
bmpsave->Save("ファイルパス", ImageFormat::Jpeg );
delete bmpsave;
といった具合でしょう ・・・
両方ともできました^^
プログラムだけで画像を作る方法について長い間考えていたので、すごく助かりました。
本当にありがとうございます。
No.4
- 回答日時:
既に正しい回答が出されていますので、其方に沿った方が無難だと思います。
一応、訊ねられた事に返答だけさせて頂きます。
>>・コマンド ライン オプション '/clr:pure' は、プリコンパイル済みヘッダーが作成されたときのものと異なります。
・'/D_M_CEE_PURE=001' がプリコンパイル済みヘッダーに定義されていますが、現在のコンパイル処理には定義されていません。
・C:\Program Files\Microsoft Platform SDK\Include\objidl.h(7583) : error C2872: 'IDataObject' : あいまいなシンボルです。
一旦クリーンしてからビルドして見て下さい。
>>もしlena.bmpという画像を100*100のサイズにしたかったら、
::LoadImage(NULL, "c:~lena.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
ということでよろしいのでしょうか?
HBITMAP hBmp = ::LoadImage(NULL, "c:~lena.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
System::Drawing::Bitmap^ bmp = System::Drawing::Bitmap::FromHbitmap(System::IntPtr(hBmp));
::DeleteObject(hBmp);
以後bmpクラスを使う事に成ります。
"c:~lena.bmp"と直接入力するのなら、其れで良いと思いますが、System::String^から渡す場合は、マーシャリングが必要です。
『プログラム上で画像作成』URLを参考にして見て下さい。
せっかく長々と詳しく教えていただいたのにすみません、今回は別の方法でできてしまいました。
クリーンすることでエラーもなくなりました^^
こちらの方法も使う機会があると思うので、そのときにまた使ってみようと思います。
詳しい説明ありがとうございました。
No.3
- 回答日時:
適切なPaintイベントを記述してやれば 大きさも自由に描画できますよ
Formのメンバーに
Bitmap^ m_bmp;
などと記述しておきます
何かのイベントで
m_bmp = (Bitmap^)Bitmap::FromFile("ファイルパス");
pictureBox1->Invalidate();
といった具合にBitmapオブジェクトを生成してPaintイベントを呼ぶようにしておきます
FormのPaintやPictureBoxのPaintイベントで
if ( m_bmp == nullptr )
return;
e->Graphics->DrawImage( m_bmp, 0, 0, 640, 480 );
などと記述すればいいでしょう
または CreateGraphicsなどでGraphicsオブジェクトを生成して描画しましょう
プラットフォームSDKのLoadImageはビットマップのハンドルを返すだけです
Bitmapオブジェクトには成りえないのでそのままでは使い物になりません
回答ありがとうございます。
こちらの方法から先にやらせていただきました^^;
Bitmap^ b;で宣言を行い、ペイントイベントで以下のようにしました。
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
if(b){
e->Graphics->DrawImage(b,0,0,200,200);
}
}
また、ボタンのクリックイベントで、
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
b = (Bitmap^)Bitmap::FromFile("C:/~lena.bmp");
pictureBox1->Invalidate();
}
とやっても出力されなかったのですが、ロードイベントで、
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
b = (Bitmap^)Bitmap::FromFile("C:/~lena.bmp");
pictureBox1->Invalidate();
}
のようにしたら(0,0)座標に表示されました。これはpicture1に出力できないのでしょうか?
また、この補正された画像は指定したサイズのままで保存はできるのでしょうか?
No.2
- 回答日時:
C++/CLIでやるなら Bitmapオブジェクトを使ったほうが簡単でしょう
pictureBox1->Image = Bitmap::FromFile("ファイルパス");
といった具合です ・・・
こんにちわ、回答ありがとうございます。
そうですね、
pictureBox1->Image = Bitmap::FromFile("ファイルパス");
だと指定された画像ファイルが表示されるんですけど、サイズの指定ができないんですね。
サイズの指定をしたいのでLoadImage関数について知らべています。
難しいようで、他に方法があれば良いのですが。
No.1
- 回答日時:
こんばんは。
ああ、それ、私が過去にした回答です(はっはっは)。
http://oshiete1.goo.ne.jp/qa4558108.html
呼べませんか? う~む。先ず、
>>Visal Studio 2005(C++)のフォームアプリケーションでプログラミング
と有りますが、ExpressEditionの事でしょうか?(簡単な話、マイクロソフトのHPからダウンロードして来たモノ)
もしそうであるならば、別途PlatformSDKをダウンロードしてインストールしないと、LoadImageの様なAPIは使用出来ません。
コレです。設定等は、検索すれば出て来ます。
http://www.microsoft.com/downloads/details.aspx? …
で、肝心な呼び出し方ですが・・・。
「LoadImage()API」
http://msdn.microsoft.com/ja-jp/library/cc364835 …
例えば、ファイルから読んで、任意のサイズに伸縮させたい場合は、
lpwstrFileNameはファイル名
iWidthは望む横幅
iHeightは望む縦幅
::LoadImage(NULL, lpwstrFileName, IMAGE_BITMAP, iWidth, iHeight, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
と書いて呼び出します。
後、以下のヘッダーとライブラリをインクルード、リンクする必要が有ります。
#include<windows.h>
#pragma comment(lib, "gdi32.lib")
更にマネージドを使用している時には「プロパティを開いて共通言語ランタイムサポートを「共通言語ランタイムサポート(/clr)」に設定する」必要も有ります。
必要な局面を簡単に言うと、今手元にあるプログラム内に、
System::String^
や
Form1^
見たいな単語が出て来ているかどうかです。出てきているのならば、必要と言う事です。
こんにちわ、回答ありがとうございます。
PlatformSDKをインストールして、
http://www.cppdrive.jp/vc/sdk/index.htmlのサイトを参考に設定をして最後いきました。
::の後にもちゃんとLoadImage関数がでてきています。
しかし・・・今度は100個以上のエラーがでてきてしまいます。
例)
・コマンド ライン オプション '/clr:pure' は、プリコンパイル済みヘッダーが作成されたときのものと異なります。
・'/D_M_CEE_PURE=001' がプリコンパイル済みヘッダーに定義されていますが、現在のコンパイル処理には定義されていません。
・C:\Program Files\Microsoft Platform SDK\Include\objidl.h(7583) : error C2872: 'IDataObject' : あいまいなシンボルです。
あいまいと言われましても何をどうなおせばよいのやら・・・。
machongolaさんの教えてくれた設定もすべてやったはずなのですが・・・
他にするべき設定はありますでしょうか?
もしlena.bmpという画像を100*100のサイズにしたかったら、
::LoadImage(NULL, "c:~lena.bmp", IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
ということでよろしいのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) EXCEL マクロで 同じフォルダ内の複数ファイルの複数行全体を選択して1つのファイルに集約 4 2022/09/27 18:41
- 楽器・演奏 ★ずっと疑問なのですが・・・? 5 2023/02/24 20:18
- その他(プログラミング・Web制作) Linuxについて質問です。 引数に指定されたアクセスログのファイルからアクセス数が多い順に上位3つ 1 2023/02/03 03:46
- PHP 掲示板を資料を参考にして開発中ですが、画像がアップされません? 1 2022/11/21 06:44
- Excel(エクセル) EXCELマクロでandroidタブレットから取りんだJPEGファイルをうまくセルに貼り付けられない 2 2022/07/31 15:03
このQ&Aを見た人はこんなQ&Aも見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
画面を強制的に再描画させる方法
C言語・C++・C#
-
JPEGやPNGが読めるLoadImage関数
C言語・C++・C#
-
ビットマップに描画をしてピクチャーコントロールに貼り付けるためには?
C言語・C++・C#
-
-
4
MFCで画像を表示させているのですが、透過表示する方法がわかりません。
C言語・C++・C#
-
5
CStaticコントロールの静的イメージ描画
C言語・C++・C#
-
6
ボタンの表示の色、フォントを変更したい
C言語・C++・C#
-
7
VC++のコンボボックスの各項目の背景色と文字色を変える方法
C言語・C++・C#
-
8
VC++プログラムをつかったBMP画像の拡大縮小について
C言語・C++・C#
-
9
MFC - ダイアログボックスのPictureControlへの画像表示
C言語・C++・C#
-
10
StretchBlt関数について
C言語・C++・C#
-
11
MFCでOnPaintのタイミング
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
【エクセル】複数のTextBoxに共...
-
日本語の文字化けを直す方法
-
コードでオブジェクトを最前面に
-
エクセルのデータをwebフォーム...
-
Accessのフォーム上にエクセル...
-
VBAで選択範囲外の図形(オブジ...
-
[C#] DataGridViewの項目名
-
現在アクティブになっているオ...
-
txtNo,txtDate等の意味
-
カタカナ&数字だけを消したい
-
Imageコントロールにグラフを表...
-
pictureBoxの絵保存について。
-
【VBA】ワークシート上に画像フ...
-
「ご処理進めて頂きますようお...
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
エクセルVBAでセル番地を指定し...
-
日本語の文字化けを直す方法
-
Excel VBAでマウスの左クリック...
-
【エクセルのマクロ】クリップ...
-
現在アクティブになっているオ...
-
Accessのフォーム上にエクセル...
-
PowerpointVBAで指定のShapeオ...
-
文字列で小数点以下の0を削除し...
-
Excel2007 でのチェックボック...
-
エクセルのデータをwebフォーム...
-
【エクセル】複数のTextBoxに共...
-
コードでオブジェクトを最前面に
-
Imageコントロールにグラフを表...
-
ExcelのシートをAccessで表示し...
-
ユーザーフォームのインポート...
-
カッコ付けのオブジェクト名を...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
おすすめ情報