第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

圖像/圖形成形狀

圖像/圖形成形狀

喵喵時光機(jī) 2019-12-05 13:10:08
我想知道是否有任何方法可以將圖像/圖形轉(zhuǎn)換為Shape?例如,我可以將摩托車形狀的輪廓轉(zhuǎn)換為,Shape然后在Java中使用它嗎?我知道您可以用普通正方形或圓角,多邊形等來做。但是有沒有辦法做自定義形狀?
查看完整描述

3 回答

?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊

這是更快但不太準(zhǔn)確的東西,對于碰撞檢查或2D物理很有用。


    Point[] MakePoly(BufferedImage spr,int d,int angle){


//creates an outline of a transparent image, points are stored in an array

//arg0 - BufferedImage source image 

//arg1 - Int detail (lower = better)

//arg2 - Int angle threshold in degrees (will remove points with angle differences below this level; 15 is a good value)

//      making this larger will make the body faster but less accurate;



    int w= spr.getWidth(null);  int h= spr.getHeight(null);


    // increase array size from 255 if needed

    int[] vertex_x=new int[255], vertex_y=new int[255], vertex_k=new int[255]; 


    int numPoints=0, tx=0,ty=0,fy=-1,lx=0,ly=0; vertex_x[0]=0; vertex_y[0]=0; vertex_k[0]=1; 

    for (tx=0;tx<w;tx+=d)  for (ty=0;ty<h;ty+=1)       if((spr.getRGB(tx,ty)>>24) != 0x00 ) 

        {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints++; if (fy<0) fy=ty; lx=tx; ly=ty; break;  }      

    for (ty=0;ty<h;ty+=d)  for (tx=w-1;tx>=0;tx-=1)    if((spr.getRGB(tx,ty)>>24)  != 0x00 && ty > ly)

        {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints++; lx=tx; ly=ty; break;  }     

    for (tx=w-1;tx>=0;tx-=d)  for (ty=h-1;ty>=0;ty-=1) if((spr.getRGB(tx,ty)>>24) != 0x00 && tx < lx)

        {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints ++; lx=tx; ly=ty; break; }     

    for (ty=h-1;ty>=0;ty-=d)  for (tx=0;tx<w;tx+=1)    if((spr.getRGB(tx,ty)>>24) != 0x00 && ty < ly && ty > fy)

        {vertex_x[numPoints]=tx; vertex_y[numPoints]=h-ty; vertex_k[numPoints]=1; numPoints ++; lx=tx; ly=ty; break; }      

    double ang1,ang2;       for (int i=0;i<numPoints-2;i++) {

        ang1 = PointDirection(vertex_x[i],vertex_y[i], vertex_x[i+1],vertex_y[i+1]);

        ang2 = PointDirection(vertex_x[i+1],vertex_y[i+1], vertex_x[i+2],vertex_y[i+2]);

         if (Math.abs(ang1-ang2) <= angle)   vertex_k[i+1] = 0;         }

    ang1 = PointDirection(vertex_x[numPoints-2],vertex_y[numPoints-2], vertex_x[numPoints-1],vertex_y[numPoints-1]);

    ang2 = PointDirection(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);

     if (Math.abs(ang1-ang2) <= angle)      vertex_k[numPoints-1] = 0; 

    ang1 = PointDirection(vertex_x[numPoints-1],vertex_y[numPoints-1], vertex_x[0],vertex_y[0]);

    ang2 = PointDirection(vertex_x[0],vertex_y[0], vertex_x[1],vertex_y[1]);

     if (Math.abs(ang1-ang2) <= angle)      vertex_k[0] = 0;

     int n=0;for (int i=0;i<numPoints;i++)if(vertex_k[i]==1)n++;

    Point[] poly= new Point[n]; n=0; for (int i=0;i<numPoints;i++) if (vertex_k[i]==1)

    { poly[n]=new Point(); poly[n].x=vertex_x[i]; poly[n].y=h-vertex_y[i];n++;} return poly;

}


double PointDirection(double xfrom,double yfrom,double xto,double yto){

    return  Math.atan2(yto-yfrom,xto-xfrom)*180/Math.PI ;

}


查看完整回答
反對 回復(fù) 2019-12-05
  • 3 回答
  • 0 關(guān)注
  • 432 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號