• 締切済み

画像操作について

いつもお世話になります。 MFCベースでCreateDIBSectionの使い方を教えていただけないでしょうか? ビットマップ画像を回転させようとしているのですが、 MFCベースで作りこんでいるため、ウィンドウハンドルの 扱い方などがよくわかりません。 MFCベースだと再度HWNDとして取得する必要があるのでしょうか? それかキャストしないといけないのでしょうか? どなたかご教示おねがいいたします。

みんなの回答

  • X4RR
  • ベストアンサー率62% (5/8)
回答No.3

CreateDIBSectionの第一パラメータはウィンドウのパレットを使用する場合 以外は無視できます(0を指定する) デバイスコンテキストを使う場合はGetDC関数を使用して取得します。

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.2

CreateDIBSectionはウィンドウハンドル必要内と思うのですが、 ウィンドウハンドルが必要だというなら、 CWndのm_hWndの中に入っています。

  • X4RR
  • ベストアンサー率62% (5/8)
回答No.1

ウィンドウハンドルを取得するだけならば、対象ウィンドウのクラス(CWndから派生したもの)の m_hWndメンバがそのまま使用できます。 というか、CreateDIBSectionでウィンドウハンドルって必要でしたっけ?

参考URL:
http://www.microsoft.com/JAPAN/developer/library/jpgdipf/_win32_createdibsection.htm
yomogikun
質問者

補足

CreateDIBSectionはデバイスコンテキストハンドルを第一引数に必要だと思うのですが、MFCベースですのでHWND型のhDCを取得する方法がわからなかったのです。 まわりくどい質問の仕方で申し訳ありません。

関連するQ&A

  • ビットマップボタンを押したときの処理についてなんですが

    環境はVC++6.0 MFC ダイアログベースです。 MFC初心者なんですが、 HBITMAP hBitmap; hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), (LPCTSTR)csBMPFile,      IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); を使いビットマップハンドルをし取得しました。 ビットマップの貼り付けは出来たのですが、ボタンを押したときにビットマップの画像を変える処理の仕方がわかりません>< loadbitmapsなら容易に出来るのですが、どうしてもloadimageを使って表示したいのですが、どのようにすれば良いでしょうか? 御教授よろしくお願いします><

  • デバイスコンテキストについて

    いつもお世話になります。 MFCアプリケーションWIZでデスクトップアプリを作成しているのですが、 HDC型のデバイスコンテキストの取得方法がわかりません。 CWndのメンバ変数m_hWndにウィンドウハンドルが格納されるというのは わかったのですが、 hDC = GetDC(m_hWnd)だと間違っているのですよねー。 ご教示よろしくお願い致します。

  • Wordでウィンドウハンドル(Hwnd)を取得したい

    Word2007、2002を使用しています。 Wordでウィンドウハンドル(Hwnd)を取得したいと思ったのですが、 どのように取得して良いかわかりませんでした。 Excelであれば以下のように取得できました。  Excel.Application.Hwnd どのようなプログラムを書けばHwndは取得できますでしょうか? 私なりに調べてみたのですが、うまく見付けられませんでした。 もしご存知でしたら、ご教示お願いいたします。

  • ビットマップ画像表示

    いつもお世話になっております。 VS2005でC++を用いてWindowsアプリケーションの作成をしています。 子ウィンドウにビットマップ画像(ファイル名:HELP.bmp)を 表示させようとプログラムを組んだのですが、 子ウィンドウを出してもビットマップ画像が表示されません。 以下のようなプログラムを追加しました。 --------------------------------- ///リソーススクリプト/////////////////////////////////  IDB_BITMAP1  BITMAP DISCARDABLE  "HELP.bmp" ///ヘッダースクリプト/////////////////////////////////  #define IDB_BITMAP1   3000 ///ソーススクリプト/////////////////////////////////// void ShowMyBMP(HWND hWnd, HDC hdc){   HDC hmdc;   HBITMAP hBitmap;   BITMAP bmp;   HINSTANCE hInst;   int BMP_W, BMP_H;   hInst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE);   hBitmap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));  //インスタンスハンドル取得   GetObject(hBitmap, sizeof(BITMAP), &bmp);  //ビットマップの情報を得る   BMP_W = (int)bmp.bmWidth;  //画像の幅   BMP_H = (int)bmp.bmHeight;  //画像の高さ   hmdc = CreateCompatibleDC(hdc);  //メモリデバイスコンテキストハンドルを取得   SelectObject(hmdc, hBitmap);   BitBlt(hdc, 0, 0, BMP_W, BMP_H, hmdc, 0, 0, SRCCOPY);   StretchBlt(hdc, 0, BMP_H, BMP_W / 2, BMP_H / 2, hmdc, 0, 0, BMP_W, BMP_H, SRCCOPY);   DeleteDC(hmdc); //デバイスコンテキストハンドルを開放   DeleteObject(hBitmap);   return; } --------------------------------- ShowMyBMP関数は子ウィンドウを表示するときに実行されます。 全て載せられないので追加した部分のみプログラムを載せましたが、 この部分だけでも、プログラムの間違い等はありませんでしょうか。 ご教授お願いいたします。

  • 画像操作について2

    どなたか助けてください。 下記ソースをチェックしていただけないでしょうか? ビットマップ画像処理を行うために、CreateDIBSection()で編集領域を 確保して、imageにコピーして画像操作を行いたいのですが、 Debug Assertion Failedというエラーがでます。 知識不足ということもあり、ソース自体に問題がある可能性の方が高いのですが、 根本的に画像操作に対する考え方が間違っているのでしょうか? ご教授よろしくお願い致します。 環境はVC++6.0 MFC ダイアログベースです BOOL C***Dlg::*******() { HBITMAP hBmp; BITMAPINFOHEADER bi; unsigned *bmbuf; image , MemDC, MemDC2はPublicです。 bi.biSize = sizeof(BITMAPINFOHEADER); bi.biWidth = 16; bi.biHeight = -40; //top-down bi.biPlanes = 1; bi.biBitCount = 32; bi.biCompression = BI_RGB; bi.biSizeImage = 0; bi.biXPelsPerMeter = 0; bi.biYPelsPerMeter = 0; bi.biClrUsed = 0; bi.biClrImportant = 0; hBmp=CreateDIBSection(NULL, (LPBITMAPINFO)&bi, DIB_RGB_COLORS, (void **)(&bmbuf), NULL, 0); CDC* pDC = this->GetDC(); MemDC.CreateCompatibleDC(pDC); SelectObject(MemDC.m_hDC,hBmp); MemDC2.CreateCompatibleDC(pDC); HBITMAP h_BMP = (HBITMAP)LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_******), IMAGE_BITMAP, 16, 40, LR_CREATEDIBSECTION); HBITMAP h_OLD_BMP = (HBITMAP)::SelectObject(MemDC2.m_hDC,h_BMP); m_pbg1dc->BitBlt(42,16,100,100,&MemDC2,0,0,SRCCOPY); memcpy(image, bmbuf, 16 * 40 * 4); ::SelectObject(MemDC2.m_hDC,h_OLD_BMP); MemDC2.DeleteDC(); DeleteObject(hBmp); return TRUE; }

  • ダイアログウィンドウのオーナードローボタンの画像を定期的に差し替えたい

    いつも参考にさせていただいてます。 タイトルにも書きましたが、ダイアログベース(が関係してるかは分かりませんが)のウィンドウにあるオーナードローボタンのビットマップ画像を1秒ごとに更新したりすることは可能なのでしょうか? また可能であれば、どのように実装するのがいいのかご教示下さい。 宜しくお願い致します。

  • ボタンのハンドルウィンド取得について

    OS:Windows Vista Business 開発環境:Microsoft Visual Studio C++ 2005,Microsoft Spy++ XRay(Data Analyze)----.exeを起動し、データファイルを読み込むため ボタンを押して"開く"ダイアログを表示させたいのですが、ボタンの キャプションが空白であるためハンドルウィンドが取得できません。 ボタンのコントロールIDがわかっているため、下記のようなプログラムを書いてみたのですが上手くいきません。ご教示お願いいたします。 hWnd=FindWindow("ThunderRT6FormDC",_T("XRay (Data Analyze) --- ")); SetForegroundWindow(hWnd); hbtn=GetOpenButton(hWnd); HWND GetOpenButton(HWND hdlg) {   HWND hbtn = NULL;   ::EnumChildWindows(hdlg, FindOpenButton, reinterpret_cast<LPARAM>   (&hbtn));   return hbtn; } static BOOL CALLBACK FindOpenButton(HWND hwnd,LPARAM lParam) {   TCHAR tbuf[1024];   ::GetWindowText(hwnd, tbuf, sizeof(tbuf)); //表示されているテキストを取得   if ((lstrcmp(tbuf, _T("")) == 0)&&(GetDlgCtrlID(hwnd)==0x00000032)) {     HWND *ret = reinterpret_cast<HWND*>(lParam);     *ret = hwnd;     return FALSE; //探索終了   }   return TRUE; //探索続行 } 画像は青で囲んであるのがアプリのウィンドウ、赤で囲んであるのがハンドルウィンドを取得したいボタンのウィンドウです。

  • 【VC++6.0 MFC】画像表示について

    お世話になっております。C++初心者です。 とある開発でVC++6.0のMFCを利用して画像表示を行う作業をしています。 リソースファイルを使用せず、 外部の画像ファイルを読み込みピクチャーボックスに表示しなければならないのですが、 下記の関数を呼び、BMPファイルを読み込み、 NULLの場合はエラーメッセージを表示するようにしているのですが、 必ずNULLが返ってきてしまいます。 何が問題なのかもわからず苦戦しております。 知識不足で申し訳ないのですが、お願いします。 【疑問点】 ・画像ファイルの指定は絶対パス?相対パス? ***問題の箇所*** HBITMAP hBmp; // ビットマップハンドル // ビットマップのハンドル取得 hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),"1.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE); // ハンドルのチェック if(hBmp == NULL) {   AfxMessageBox("読み込みに失敗しました");   return ; }

  • VC++6.0 MFCダイヤログベースでの画像処理

    初心者です。 VC++6.0 MFCダイヤログベースのアプリケーションで、ビットマップ画像を生成表示するにはどうしたらよいでしょうか。 MFC-SDIでは経験があります。 例題と扱っているサイトありましたら、紹介願います。

  • HWNDについて

    初歩的な質問です。 VC++のMFCアプリケーションWIZでアプリを作成しているのですが、 ウィンドウハンドルをどのように取得すればよろしいのでしょうか? まったくの初心者でHWNDをグレーのまま使用しているので。 よろしくお願い致します。

専門家に質問してみよう