RSS
ÈÈÃŹؼü×Ö£º ¡¡¼ÆËã»úÓйØ×ÊÁÏ ¡¡33252 ¡¡mkv ¡¡word ¡¡MKV_NT
µ±Ç°Î»Öà : Ö÷Ò³>vc±à³Ì>½çÃæ/´°¿Ú>Áбí

»ùÓÚWindows GDI+µÄ¼¸ºÎÏßÌõ´¦Àí

À´Ô´£º¼ÆË㼸ÓëÐÅÏ¢¼¼Êõ ×÷Õߣº ʱ¼ä£º2006-11-30 µã»÷£º
4¡¢Â·¾¶µÄ¼¸ºÎ±äÐÎ

¡¡¡¡GDI+ÌṩµÄMatrixÀà·â×°±íʾ¼¸ºÎ±äÐεÄ3¡Á3·ÂÉ侨Õó¡£Í¨¹ýÉèÖÃMatrix¶ÔÏ󣬿ÉÒÔÐýת¡¢Ëõ·Å¡¢´íÇлòÆ½ÒÆGraphicsPath¶ÔÏó¡£

¡¡¡¡±í2¡¡MatrixÀà³£ÓóÉÔ±º¯Êý

³£ÓóÉÔ±º¯Êý ¹¦ÄÜÃèÊö
Rotate Ïà¶ÔÓÚÔ­µã˳ʱÕëÐýתָ¶¨½Ç¶È
Scale Ëõ·Å²Ù×÷
Shear ´íÇб任²Ù×÷
Translate Æ½ÒÆ²Ù×÷
Reset ÖØÖôËMatrix¶ÔÏó£¬Ê¹Æä³ÉΪµ¥Î»¾ØÕó

¡¡¡¡ÒÔ¾ØÐÎΪÀý£¬Â·¾¶±äÐεÄʾÀý´úÂëÈçÏ£º

Graphics g(hdc);
GraphicsPath path;
path.AddRectangle(Rect(40, 10, 200, 50));
g.DrawPath(&Pen(Color(255, 0, 0, 0),1), &path); // ÔÚÓ¦ÓñäÐξØÕó֮ǰ»æÖƾØÐÎ
// ·¾¶±äÐÎ
Matrix matrix;
matrix.Rotate(30.0f); //Ðýת˳ʱÕë30¶È
matrix.Scale(0.5f,0.5f);//ËõСһ°ë
path.Transform(&matrix);//Ó¦ÓñäÐÎ
g.DrawPath(&Pen(Color(255, 0, 0, 0),3), &path); // ÒÔ3ÏóËØ¿íµÄ´ÖÏß»æÖƱ任ºóµÄ¾ØÐÎ


ͼ4¡¡¾ØÐεÄÐýתÓëËõ·Å

¡¡¡¡ÀàËÆµÄ£¬ÓÃGraphicsPathÀàµÄWarp·½·¨£¬¿ÉÒÔ¶Ô·¾¶Ó¦ÓÃÓÉÒ»¸ö¾ØÐκÍÒ»¸öƽÐÐËıßÐζ¨ÒåµÄŤÇú±äÐΡ£

¡¡¡¡5¡¢Â·¾¶µÄ´æ´¢Óë¶ÁÈ¡

¡¡¡¡GraphicsPath ¶ÔÏó´æ´¢Ò»ÏµÁÐÖ±Ïߺͱ´Èû¶ûÑùÌõ¡£¾¡¹Ü¿ÉÒÔ½«Èô¸ÉÖÖÀàÐ͵ÄÇúÏߣ¨ÍÖÔ²¡¢»¡ÐκͻùÊýÑùÌõ£©ÌíÖÁ·¾¶£¬µ«ÔÚ´æ´¢µ½Â·¾¶ÖÐ֮ǰ£¬¸÷ÖÖÇúÏß¶¼»á×Ô¶¯×ª»¯Îª±´Èû¶ûÑùÌõ¡£Ö±Ïß¿ÉÒÔÓÉÆðµãºÍÖÕµãÀ´¹¹³É£¬¶ø±´Èû¶ûÑùÌõÇúÏßÊÇÓÉÆðµã¡¢ÖÕµãºÍ¿ØÖƵ㶨Òå¡£ËùÒÔ£¬¶ÔÓÚÒ»¸ö·¾¶µÄÃèÊö£¬¿ÉÒÔͨ¹ý¶Ô·¾¶µãÐÅÏ¢µÄ´¦ÀíÀ´ÊµÏÖ¡£

¡¡¡¡1) ´æ´¢Â·¾¶

¡¡¡¡ÔÚGraphicsPath¶ÔÏóµÄ´æ´¢¹ý³ÌÖУ¬ÓÐÈý¸öº¯Êý·Ç³£ÖØÒª£¬ÄǾÍÊÇGetPointCount¡¢GetPathPointsºÍGetPathTypes£¬ÀûÓÃÕâ3¸öº¯Êý£¬¿ÉÒÔ»ñµÃ·¾¶Öз¾¶µãµÄÊýÄ¿¡¢×ø±êºÍÀàÐÍ¡£¾ßÌå´úÂëÈçÏ£º

INT count = path.GetPointCount(); // »ñµÃ·¾¶µãÊýÄ¿
ar£¼£¼count; // ´æ´¢Â·¾¶µãÊýÄ¿
dataPoints = new Point[count];
path.GetPathPoints(dataPoints, count); // »ñµÃ·¾¶µã×ø±ê
pTypes = new BYTE[count];
path.GetPathTypes(pTypes, count); // »ñµÃ·¾¶µãÀàÐÍ
//¿ªÊ¼´æ´¢
for(INT i=0;i£¼count;i++){
¡¡ar£¼£¼dataPoints[i].X£¼£¼dataPoints[i].Y; // ´æ´¢Â·¾¶µã×ø±ê
¡¡ar£¼£¼pTypes[i]; // ´æ´¢Â·¾¶µãÀàÐÍ
}
¡­¡­¡­¡­¡­¡­¡­¡­
delete dataPoints; // »ØÊÕÄÚ´æ
delete pTypes;

¡¡¡¡2) ¶Áȡ·¾¶

¡¡¡¡ÓÉÓÚGraphicsPathÀàÖÐÖ»Óй¹Ô캯Êý²ÅÄÜÓÉ·¾¶µã´´½¨£¬¶Áȡ·¾¶µÄ·½·¨¾ÍÒª¸´ÔÓһЩÁË¡£¾ßÌå´úÂëÈçÏ£º

path.Reset(); // ÖØÖ÷¾¶
INT count;
ar£¾£¾count; // ¶Áȡ·¾¶µãÊýÄ¿
dataPoints = new Point[count]; // ¶¨Òå·¾¶µã×ø±ê
pTypes = new BYTE[count]; // ¶¨Òå·¾¶µãÀàÐÍ
//¿ªÊ¼¶ÁÈ¡
for(INT i=0;i£¼count;i++){
¡¡ar£¾£¾dataPoints[i].X£¾£¾dataPoints[i].Y; // ¶Áȡ·¾¶µã×ø±ê
¡¡ar£¾£¾pTypes[i]; // ¶Áȡ·¾¶µãÀàÐÍ
}
GraphicsPath pa(dataPoints,pTypes,count); // ÓÉ·¾¶µã´´½¨ÁÙʱ·¾¶pa
path.AddPath(&pa,false); // ½«ÁÙʱ·¾¶paÌí¼Óµ½Â·¾¶pathÖÐ
¡­¡­¡­¡­¡­¡­¡­¡­
delete dataPoints; // »ØÊÕÄÚ´æ
delete pTypes;

¡¡¡¡6¡¢Â·¾¶µÄÏ߶αƽü

¡¡¡¡µ÷ÓÃGraphicsPath¶ÔÏóµÄFlatten·½·¨£¬¿ÉÒÔ½«Â·¾¶ÖеÄÇúÏßÈ«²¿×ª»»³É¶à¶ÎÏàÁ¬µÄÖ±Ï߶Σ¬Èçͼ5Ëùʾ£¬ÕâÖÖ·½·¨Ò²±»³ÆÎª"À­Æ½"»ò"չƽ"¡£Flatten·½·¨½ÓÊÕÀ­Æ½²ÎÊý£¬¸Ã²ÎÊýÖ¸¶¨À­Æ½µÄ·¾¶ºÍԭʼ·¾¶Ö®¼äµÄ×î´ó¾àÀë¡£


ͼ5 ԭʼÇúÏß·¾¶ÓëÀ­Æ½ºóµÄ·¾¶£¨ÕâÀïÀ­Æ½²ÎÊýΪ8.0£©

¡¡¡¡½«Â·¾¶À­Æ½ºó£¬Ê¹ÓÃÖ±Ï߶㤶ÈÀۼӵķ½·¨£¬¿ÉÒÔÇáÒ׵ؼÆËã³ö·¾¶ÇúÏߵij¤¶ÈºÍÆäËûÐÅÏ¢£¬²¢¿ÉÒÔͨ¹ý½µµÍÀ­Æ½²ÎÊýÖµµÄ·½·¨À´Ìá¸ß¼ÆËãµÄ¾«¶È¡£ÓÉÓÚ·¾¶µãµÄ×ø±êÊÇÒÔ¸¡µãÊýµÄÐÎʽ±£´æµÄ£¬Òò¶øÓÃÕâÖÖ·½Ê½µÃµ½µÄÇúÏß³¤¶ÈµÄ¾«¶È»¹ÊÇÏ൱¸ßµÄ¡£

¡¡¡¡½áÊøÓï

¡¡¡¡GraphicsPath»¹ÓкܶàÖÖÓ÷¨£¬±ÈÈç¿ÉÒÔʹÓÃIsVisible·½·¨ÅжÏ×ø±êµãÊÇ·ñÂäÔÚ·¾¶ÉÏ£¬Ê¹ÓÃIsOutlineVisible·½·¨Ö¸Ê¾µ±Ê¹ÓÃÖ¸¶¨µÄPen¶ÔÏó»æÖÆ´ËGraphicsPath ¶ÔÏóʱ£¬Ö¸¶¨µãÊÇ·ñ°üº¬ÔÚºóÕßµÄÂÖÀªÄÚ¡£

¡¡¡¡´Ó¿ª·¢µÄʵ¼ù¹ý³ÌÀ´¿´£¬Ê¹ÓÃGDI+½øÐÐͼÐαà³Ì£¬±ÈÔ­ÏȵÄGDI±à³Ì¹ý³ÌÒªÈÝÒ׺ܶ࣬¶øÇÒ×îÖÕµÄͼÐι¦ÄÜÒ²¸üÇ¿´ó¡£
¹²2Ò³: ÉÏÒ»Ò³ [1] 2 ÏÂÒ»Ò³
×îÐÂÆÀÂÛ¹²ÓÐ 0 Î»ÍøÓÑ·¢±íÁËÆÀÂÛ
·¢±íÆÀÂÛ
ÆÀÂÛÄÚÈÝ£º²»Äܳ¬¹ý250×Ö£¬ÐèÉóºË£¬Çë×Ô¾õ×ñÊØ»¥ÁªÍøÏà¹ØÕþ²ß·¨¹æ¡£
Óû§Ãû£º ÃÜÂ룺
ÄäÃû?
×¢²á