• ベストアンサー

Clmage上の画像ファイルを表示する(C++)

myRgnCreateRectRgn(rect.left,rect.top,rect.right,rect.bottom); は何をしているのか教えてください

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

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

 こんばんは。    (rect.left, rect.top) - (rect.right, rect.bottom)  で示される領域(リージョンハンドル)を作成していると思われます。  デバイスコンテキストに  (1)リージョンハンドルを設定。  (2)CImage(恐らくはビットマップハンドルを内包している筈)をデバイスコンテキストに設定。  (3)描写を行う。  すると、リージョンハンドルの領域分だけ、描写を「する・しない」と言った事が可能に成ります。  リージョンハンドルの領域分を「する・しない」の設定はCombineRgn()で可能です。  「CreateRectRgn()API」  http://msdn.microsoft.com/ja-jp/library/cc428352.aspx  「CombineRgn()API」  http://msdn.microsoft.com/ja-jp/library/cc428338.aspx

pokarisu
質問者

お礼

回答ありがとうございます参考にします

関連するQ&A

  • C# PanelのRegion設定について

    ボタンクリックにてPanelのRegion領域を変更したいのですが、勝手にリサイズされて困っております。 panel1の初期Location.X=0,Location.Y=0 のときはうまくいくのですが、初期Locationに値が入ると、矩形領域自体がリサイズされてしまいます。 (矩形領域が小さくなります。) なお、下記コードはテスト様に作成したもので、panel1のサイズを取得して、GraphicsPath からRegionを設定しています。 同じサイズなので、変化はないハズなのですが、初期Locationに値を設定すると、リサイズされてしまいます。 panel1のプロパティは panelのAutoSize=False Dock=None Margin=0,0,0,0 です。 private void button1_Click(object sender, EventArgs e) { Rectangle rect = new Rectangle(panel1.Location.X,panel1.Location.Y, panel1.Width,panel1.Height); GraphicsPath path = GetRoundRect(rect, 10); Graphics g = CreateGraphics(); g.SmoothingMode = SmoothingMode.AntiAlias; panel1.Region = new Region(path); } public GraphicsPath GetRoundRect(Rectangle rect, int radius) {   path.StartFigure();   path.AddLine(rect.Left, rect.Top, rect.Right, rect.Top);   path.AddLine(rect.Right, rect.Top,rect.Right, rect.Bottom);   path.AddLine(rect.Right, rect.Bottom,rect.Left, rect.Bottom);   path.AddLine(rect.Left, rect.Bottom,rect.Left, rect.Top);   path.CloseFigure();   return path; } アドバイスよろしくお願いいたします。

  • CSSのcaption-side:・・・

    続けて質問すみません。 CSSのcaption-side:なのですが、 right / left / bottom はテーブルのどこに配置されるのが正しい配置ですか?        TOP   ┏━━━━━━━━━━━┓   ┃              ┃   ┃              ┃ left┃              ┃right   ┃              ┃   ┃              ┃   ┗━━━━━━━━━━━┛        bottom ですか?  left   TOP  right ┏━━━━━━━━━━━┓ ┃              ┃ ┃              ┃ ┃              ┃ ┃              ┃ ┃              ┃ ┗━━━━━━━━━━━┛      bottom ですか?

  • C言語・Windows RECTが渡せない

    C言語のWindowsプログラムで、左クリック後に四角形の描画をしたいのですがうまくいきません。 WM_LBUTTONDOWNイベントで定義したRECT構造体を、別の関数に渡しRectangleで描画したいのですが、その関数内でRECTの値を調べるととんでもない値になっています。 何度やってもどうして値がおかしくなるのかわかりません。 WM_LBUTTONDOWNもWM_PAINTも正常に反応していると思います。 どうか知恵をお貸しくださいm(_ _)m 以下ソースコードのメッセージ処理部分です。 ウィンドウ生成のひな型はサイトの物を丸写しし、正常に動作することを確認しています。 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rcPos; switch (msg){ case WM_LBUTTONDOWN: rcPos.top =0; rcPos.left =0; rcPos.bottom =100; rcPos.right =100; InvalidateRect(hWnd, &rcPos, FALSE); break; //ウィンドウの描画 case WM_PAINT: hdc = BeginPaint(hWnd, &ps); DrawGr(hWnd, hdc, &rcPos); EndPaint(hWnd, &ps); break; //ウィンドウの削除 case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd, msg, wParam, lParam)); } return (0L); } //描画 int DrawGr(HWND hWnd, HDC hdc, RECT *rcPos) { int i; HBRUSH hBrush, hOldBrush; char *str_org = "rc.top=%d rc.left=%d rc.bottom=%d rc.right=%d"; char strx[256]; //四角形 hBrush = CreateSolidBrush(RGB(100, 100, 255)); hOldBrush = (HBRUSH)SelectObject(hdc, hBrush); //デバッグ用 wsprintf((LPSTR)strx, (LPCSTR)str_org, rcPos->top, rcPos->left, rcPos->bottom, rcPos->right); MessageBox(hWnd, (LPCSTR)strx, (LPCSTR)"終了確認", MB_OKCANCEL | MB_ICONQUESTION); Rectangle(hdc, rcPos->left, rcPos->top, rcPos->right, rcPos->bottom); SelectObject(hdc, hOldBrush); DeleteObject(hBrush); return 0; }

  • スクロールバーによって表示がズレます。

    下記のようにCSSを書きました。 topとしてテーブルクラス指定した中に、areaの領域をとって内容を流し込んでいるのですが、ブラウザにスクロールバーがつく場合とつかない場合とで表示が中央からスクルーロバー分、広くなったり狭くなったりします。(IEはOKなのですが・・・) どうすれば表示がずれないようにできるでしょうか。 --------------------------------- body { margin-top: 0; margin-right: auto; margin-left: auto; margin-bottom: 0; padding: 0; color: #333333; text-align: center; background-color: #FFFFFF; } #area { padding-top: 2px; padding-bottom: 30px; padding-left: 10px; padding-right: 10px; } table { margin: 0; padding: 0; } table.top { margin-top: 5px; margin-right: auto; margin-left: auto; margin-bottom: 0; width: 780px; text-align:center; background-color: #FFFFFF; } table.top td { text-align:left; vertical-align: top; }

    • ベストアンサー
    • HTML
  • RAW画像高速表示について

    画像処理ソフトの研究をc言語で行っています。 GUIの導入を目指してVC++の勉強を始めたのですが、RAW画像をうまく表示できず困っています。 現在練習と言うことで、スクロールバーの値によって画像を二値化して表示する処理を行っています。 表示部分を以下のように書いた(ほとんど本を丸写したので意味もちゃんとわかっていませんが)のですが、動作が遅すぎて困っています。 (IMG:unsigned char型の二次元配列にRAWデータを格納したもの) 高速で表示することはできないのでしょうか? アドバイス等、よろしくお願いします。 void Cimage_binView::writeImg(void) {  CClientDC myDC(this);  CDC *pDC = m_pict.GetDC();  int col,row;  int I;  CRgn myRgn;  RECT rect;  m_pict.GetClientRect(&rect);  myRgn.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);  pDC->SelectObject(&myRgn); //画像出力  for(col=0;col<256;col++)   for(row=0;row<256;row++)   {    I=IMG[col][row];        if(I<m_sbar1.GetScrollPos())I=0;//スクロールバーの値より小さければ黒    else I=255;//大きければ白にする }    pDC->SetPixel(row,col,RGB(I,I,I));  } }

  • スタイルシート a:activeで画像を変える

    スタイルシートの設定で画像メニューの切替を行おうとしていたんですが a.activeの設定の時のみ画像切替の反応が見られません。 どうしたらいいでしょうか? 切替はclip:rect(top right bottom left)を使って一枚の画像の表示範囲で切り換えています。 【htmlメニュー部分】 <div class="MENU">  <a href="./"><img src="btn001.png"></a> </div> <div class="MENU">  <a href="./"><img src="btn002.png"></a> </div> 【スタイルシート部分】 IMG.MENU{ position:absolute; } DIV.MENU{ border:none; position:relative; float:left; } DIV.MENU A:link IMG{ clip:rect(0px 133px 25px 0px); top:0px; } DIV.MENU A:visited IMG{ clip:rect(0px 133px 25px 0px); top:0px; } DIV.MENU A:hover IMG{ clip:rect(50px 133px 75px 0px); top:-50px; } DIV.MENU A:active IMG{ clip:rect(25px 133px 50px 0px); top:-25px; } よろしくお願いします。

    • ベストアンサー
    • CSS
  • ベクターの中のベクターの呼び出し

    お世話になります。 下記のように a.h に書いた他のクラスで宣言したベクターのベクター の変数を参照すると一部がうまく取り出せません。 うまく取り出せないとは、値が変わっています。0になっていたり 桁数が増えて違う数字になっていたりします。 具体的には、 vector<vector<RECT_TABLE>> vv = setteiDlg->m_rectlist; for(int i=0 ; i < ninList ; ++i) { suu = vv.at(i).at(0).suu; (1) range.left = vv.at(i).at(0).left;  (2) range.right = vv.at(i).at(0).right; (3) range.top = vv.at(i).at(0).top;   (4) range.bottom = vv.at(i).at(0).bottom (5) : で、(1)と(2)が0であったり、7,8ケタの数字(実際は2ケタ)に代わって取り出されます。後は、OKです。 取り出されるとは、setteiDlg->m_rectlist の中を見ると正しい数字です。 vv = setteiDlg->m_rectlist; として転記した後、vv が正しくないようです。 vv は、別のビューヘッダーに下記のように書いてます。 class CYomiView : public CScrollView { protected: // シリアル化からのみ作成します。 CYomiView(); vector<vector<RECT_TABLE>> vv;        : a.h というヘッダーに記述 class RECT_TABLE { public:   int  left, top, right, bottom, suu; RECT_TABLE(int ............. : } class Settei : public CDialog {    :   vector<vector<RECT_TABLE>> m_rectlist; a.h はここまで 教えてください。お願いします。 Windows 7/Vista VS2005 VC++ MFC

  • DirectXで画像表示

    DirextXでゲームを作ってるんですがわからないことがあるんで教えてください。 背景として640×640(ピクセル)の画像を表示したくて(ウィンドウはサイズ640,640で作成) RECT from; D3DXVECTOR3 to; D3DCOLOR color; from = makeRect(0,0,640,640); to = D3DXVECTOR3(0,0,0); color = D3DCOLOR_ARGB(255,255,255,255); if(g_pTexture != NULL) g_pSprite->Draw(g_pTexture, &from, NULL, &to, color); RECT makeRect(int x, int y, int w, int h) { RECT box; box.left = x; box.top = y; box.right = w; box.bottom = h; return (box); } //g_pTexture = D3DXCreateTextureFromFileEx関数で作成したテクスチャオブジェクト。 //g_pSprite = スプライトオブジェクト。 大体こんな感じの流れで背景画像を表示したらウィンドウ全体に画像の一部分だけが拡大されて表示されました。なぜ画像全体がうまく表示されないんでしょうか? 例えば64×64のキャラクタ画像を from = makeRect(0,0,64,64); to = D3DXVECTOR3(0,0,0); で表示したら画面左上にうまく表示されました。 初心者なんであまりうまく説明できないんでかなりわかりにくいかもしれませんが、わかる方よろしくお願いします。

  • C# 印刷可能領域と余白範囲の関係?

    C# 印刷可能領域と余白範囲の関係? プリンタで印刷出来る最大画像を出力したい そこで余白範囲を印刷可能範囲まで拡大した private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { MessageBox.Show("余白範囲 変更前" + "\r\n" + " left " + e.MarginBounds.Left + "\r\n" + " right " + e.MarginBounds.Right + "\r\n" + " width " + e.MarginBounds.Width + "\r\n" + " top " + e.MarginBounds.Top + "\r\n" + " bottom " + e.MarginBounds.Bottom + "\r\n" + " height " + e.MarginBounds.Height + "\r\n");    余白範囲を印刷可能範囲まで拡大 e.PageSettings.Margins.Left = (int) e.Graphics.VisibleClipBounds.Left; e.PageSettings.Margins.Right = (int)e.Graphics.VisibleClipBounds.Right; e.PageSettings.Margins.Top = (int)e.Graphics.VisibleClipBounds.Top; e.PageSettings.Margins.Bottom = (int)e.Graphics.VisibleClipBounds.Bottom;    このようにしても前後のメッセージの値は同一でした MessageBox.Show("余白範囲内 変更後" + "\r\n" + " left " + e.MarginBounds.Left + "\r\n" + " right " + e.MarginBounds.Right + "\r\n" + " width " + e.MarginBounds.Width + "\r\n" + " top " + e.MarginBounds.Top + "\r\n" + " bottom " + e.MarginBounds.Bottom + "\r\n" + " height " + e.MarginBounds.Height + "\r\n"); } どうやら余白範囲はReadOnlyらしい そこで疑問??? (1)余白範囲を超えても印刷可能範囲ならば、全てのプリンタで画像がチョン切れることはないのだろうか? (2)そうならば余白範囲は何のためにあるのでしょうか? その存在目的は? 毎日印刷テストを繰り返し、無駄なインクと紙を浪費している私と『 母なる地球 』をお救いください!!!

  • ホームページビルダー11でフレーム設定使用時のスクロール表示

    ホームページビルダー11でフレーム設定使用時のスクロール表示について困っています。 初心者にも関わらず、フレームを多様しているからかもしれませんが、 top・left・right・bottomで、bottomを縦分割し、計5分割して ページを作成しています。 top・left・rightの部分は固定ページで、bottom部分だけを作っている状態です。 今は、各パーツにスクロールが出ます。これだと見難いので、スクロールを消して、このページ全体を一般的な一括スクロール(教えてgooの右側にあるような)にしたいのですが、できません。 過去の質問等を参考に「スクロール表示なし」等やってみましたら、 ページ自体が下側が見られなくなったりしました。 どうぞお願い致します。