Sunday, August 07, 2005

Mahesh Chand :GDI+ Programming with C#

Elovastam a fentebb megadott könyv első három fejezetét, ebből néhány gondolatot (valahogy eddig mindig távol sikerült maradnom komolyabb grafikai programozástól(3d,OpenGL,DirectX,stb),most is csak azért sikerült olvasnom a témáról,mert pont volt egy kis szabadidőm):

GDI+ egy osztálykönyvtár. Ha optimalizált és objektumorientált grafikai alkalmazást akarsz fejleszteni, vagy már eleged van a régi GDI fejlesztéstől (handle, device context), akkor érdemes átnézni, használni ezt (gdiplus.dll).
Főbb jelemzői: nincsenek handlerek, device contextek :), objektum orientált (végre!), grafikai objektumoktól független, eljárás overloding, különválasztott eljárások a rajzoláshoz és festéshez(fill), regio és stilus használat.



C++ példa vonalrajzolásra:
LRESULT APIENTRY MainWndProc(
HWND hwnd, UINT message, WPARAM wParam,
LPARAM lParam)
{
PAINTSTRUCT ps;
switch (message)
{
case WM_PAINT:
HDC handle;
PAINTSTRUCT pstruct;
HPEN hPen;
...
....
handle = BeginPaint(hWnd, &pstruct);
hPen = CreatePen(PS_SOLID, 5,
RGB(255, 255, 0));
SelectObject(handle, hPen);
MoveToEx(handle, 20, 20, NULL);
LineTo(handle, 200, 200);
EndPaint(hWnd, &pstruct);
..................
.....................
}
}

u.e. C# GDI+ példa:


private void Form1_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen pn = new Pen(Color.Red, 3);
g.DrawLine(pn, 20, 20, 200, 200);
}


Újabb példa GDI és C++ használatával egy beszinezett négyzet rajzolására:


hBrush = CreateHatchBrush(HS_CROSS, RGB(255, 0, 0));
hPen = CreatePen(PS_SOLID, 3, RGB(255, 0, 0));
SelectObject(hdc, hBrush);
SelectObject(hdc, hPen);
Rectangle(hdc, 20, 20, 200, 200);


És u.e. GDI+ használatával:


Graphics g = e.Graphics;
Pen pn = new Pen(Color.Red, 3);
HatchBrush htchBrush =
new HatchBrush(HatchStyle.Cross, Color.Red,
Color.Blue);
g.DrawRectangle(pn, 50, 50, 100, 100);
g.FillRectangle(htchBrush, 20, 20, 200, 200);


mennyivel egyszerűbb, jobban áttekinthető és persze oop szemléletű:)

0 Comments:

Post a Comment

<< Home