5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

GDI/GDI+質問スレ

1 :デフォルトの名無しさん:2008/11/20(木) 22:47:31
無かったので立てた

GDIは2DグラフィックAPIである
GDI+はGDIの上位バージョンであり次世代2DグラフィックAPIである

2 :デフォルトの名無しさん:2008/11/20(木) 22:50:05
                     ,' ,ヾ' ,メヾ ;' ,ヾ; ,;メヾ
                   "\ゞ\∵ , メ' ,/ノ; ∴/ ;"ゞ' ,
                ;"; "i ";∴.' ;ヾソヾメ,/'/ゞ;∵ヾ "ノ';ヾ
               ゝ_゛;ゞ ;"ソ"ゝメ ; ''; ゞ∵ ;ヾ/ ;ゞ/" "ゞ;,'',',
              ヾ ;\"i "'∵ヾ' ,ヾ' ,メヾ" "ゞ/ノ∴,ゞ ' ,/, ;"ヾ
お願い質問何でもござれ! ∴゛;ゞ ;" "ソゞ ; ' ; ソノ;/∵ノ" "ゞ' , ;
___ _______/;"; "i "' ,ソ;ヾ' ,メヾソ"ヾ/ヾソ∴" ' ,;メヾ
     V            ゛ヾ;\;;ii\∵ゞ ;メヾ';"ゞ ;/メヾ "/; ',
                   メヾ "ヾ ;;ヾl;メ,'iiヾ/;ヾ∴メヾ
     (二二二@            ヾ;ゞ; |;;;::iii| ノ;/
   /   /\ ゴ利益ハ信心シダイ ヾ, |;;;::iii|;,,/
  /   /(. ・ )\          ノ   ヾ;;;::iii|//"
∠__/ ( ´ー`) .\      ,,      .|;;;::iii|/゙
§|| ||§.||  |っ¢ ||§            |;;;;::iii|
  || || || || /,,, |ゝii~       wwwjjrjww!;;;;::iii|jwjjrjww〃
 | ̄ ̄ ̄| ̄凸( ̄)凸  旦~   wjwjjrj从jwwjwjjrj从jr


3 :デフォルトの名無しさん:2008/11/21(金) 00:31:20
Win32API質問箱 Build72
http://pc11.2ch.net/test/read.cgi/tech/1226575789/l50

ところで、GDI+すら次世代でも何でもないみたいですよ。
http://blogs.msdn.com/hiroyuk/archive/2008/10/30/9023528.aspx
> ネイティブのAPIは以下のように選択してくださいとのことでした。GDI/GDI+はレガシーとなります。
> ディスプレイ / デバイス→DXGI 
> 印刷→XPS 
> 画像のエンコード/デコード→WIC 
> 2Dグラフィックス→Direct2D 
> テキスト フォーマット→DirectWrite

4 :デフォルトの名無しさん:2008/11/21(金) 10:35:48
VC++ (.Net 2003)で開発をしています。
GDI+のSolidBrushで半透明ブラシを作成して、多角形を塗りつぶしたいのですが、教えてください。
FillPolygon関数で多角形を塗りつぶしたいのですが、第四引数の塗りつぶしモードでWindingを指定したいのですが、どうしたらよいのでしょうか?
(C#やVB7のサンプルは見つかるが、VC++7のサンプルが見つけられません。)
また、塗りつぶした領域内に指定した座標が範囲内かどうか、つまり当たり判定をすることは出来ますか?
(例えば、 MFCのCRgnのPtInRegionのようなことが出来る関数はありますか?)

5 :4:2008/11/21(金) 11:08:24
自己レスです。
Windingの件ですが、FillPolygon関数で引数を3つの物が見つかったので、第四引数の塗りつぶしを指定せず描画したところ、意図した描画が出来ました。
また、当たり判定ですが、PtInRegionがAPIで提供されているようなので、現在Graphicsオブジェクトとして生成した領域データをどのようにPtInRegionに渡すかを調べます。


6 :デフォルトの名無しさん:2008/11/21(金) 11:24:29
VC++はあ使えないからわからんが、
FillPolygonて第4引数なんてあったっけ?
それと、当たり判定のほうは
System.Drawing.RegionのインスタンスメソッドIsVisibleでできる

7 :sage:2008/11/21(金) 11:49:17
6>
VC++7 でGDIが使えるようにした状態で、
Graphics myGraph(hDC);

myGraph.FillPolygon( と入力すると引数が表示されると思いますが4パターンほどあります。
その中に塗りつぶしを指定しない引数3個の物があったので試したところ多角形の塗りつぶしが出来ました。

>System.Drawing.RegionのインスタンスメソッドIsVisibleでできる
それはC#でしょうか?今現在の設定では使用できないようです。


8 :デフォルトの名無しさん:2008/11/21(金) 12:16:47
myGraphってなんかのライブラリの関数なの?
ググってもhDCを引数とするもんがみつからんかった。

9 :4:2008/11/21(金) 14:34:42
とりあえず自己解決しました。お騒がせしました。
8>
Graphics myGraph(hDC); で実体を生成します。

一応メモ代わりに書いておきます。
VS .NET(2003) で確認しました。
1.プロジェクトでVC++ のWin32プロジェクトを選択します。
2.stdafx.h で
#define WIN32_LEAN_AND_MEAN をコメントアウト
#include <Gdiplus.h> を一番最後に追加。(多分Windows.h以降なら良いはず)
3.プロジェクト名.cppで
"//グローバル変数"と書かれた前当たりで
#pragma comment (lib,"Gdiplus.lib")
using namespace Gdiplus; の2行を追加

"//このコード モジュールに含まれる..."の最後に
void OnPaint(HDC); を追加

"_tWinMain"の最初に
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;

GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL); を追加

"return (int) msg.wParam;"の前に
GidplusShutdown(gdiplusToken);  を追加

"WndProc"の"case WM_PAINT:"の"描画コードをここに追加してください..."に
OnPaint(hdc); を追加

つづく

10 :4:2008/11/21(金) 14:35:56
続きです。
最後に関数OnPaint(HDC hDC)を追加します。
--------------------------
void OnPaint(HDC hDC){
Graphics myG;
PointF Ptf[5];
Point Pt[5];
HRGN hRgn;
CraphicsPath myGP;
SolidBrush br(Color(50,0,0,255));

//当たり判定のhRgn生成用
Pt[0].X = 100; Pt[0].Y = 100;
Pt[1].X = 200; Pt[1].Y = 150;
Pt[2].X = 180; Pt[2].Y = 200;
Pt[3].X = 30; Pt[3].Y = 200;
Pt[4].X = 0; Pt[4].Y = 150;

//五角形の描画用
Ptf[0].X = 100; Ptf[0].Y = 100;
Ptf[1].X = 200; Ptf[1].Y = 150;
Ptf[2].X = 180; Ptf[2].Y = 200;
Ptf[3].X = 30; Ptf[3].Y = 200;
Ptf[4].X = 0; Ptf[4].Y = 150;


11 :4:2008/11/21(金) 14:36:52
最後です。


myG.FillPolygon(&br,Ptf,5); //五角形描画
myGP.AddClosedCurve(Pt,5);
Region myR(&myGP);
hRgn = myR.GetHRGN(&myG);

//当たり判定
if(PtInRegion(hRgn,130,130) == TRUE{ //当たりを期待
MessageBox(NULL,"当たり",NULL,NULL);
}else{
MessageBox(NULL,"はずれ",NULL,NULL);
}
if(PtInRegion(hRgn,200,200) == TRUE{ //はずれを期待
MessageBox(NULL,"当たり",NULL,NULL);
}else{
MessageBox(NULL,"はずれ",NULL,NULL);
}
return;
}
--------------------------
以上で、多角形の描画と半透明ブラシので塗りつぶし、指定座標の当たり判定が実現できました。

12 :デフォルトの名無しさん:2008/11/21(金) 21:55:55
>>8
それが噂のGDI+。
http://msdn.microsoft.com/en-us/library/ms536160.aspx

7 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)