ページ 11

DrawRotaGraphF相当のコード TurnFlag

Posted: 2010年10月10日(日) 09:35
by みけCAT
http://www.play21.jp/board/formz.cgi?ac ... &rln=63031
の続きです。
DrawRotaGraphFに回転などを実装しているのですが、
TurnFlagが効かないようです。
どこが悪いかわかる方がいらっしゃいましたら教えていただければ幸いです。
kaiten関数は
http://www.play21.jp/board/formz.cgi?ac ... &rln=63052
のものです。
function.cppのDrawRotaGraphFの下に貼りつけました。
int DrawRotaGraphF(HDC to,int x,int y,float ExtRate,float Angle,
        gazou* graph,int TransFlag,int TurnFlag) {
    HDC gazoufordraw;
    HDC scaledgazou;
    HBITMAP oldbmp;
    HBITMAP scalebmp;
    HBITMAP scaleoldbmp;
    int sx,sy;
    int dx,dy;
    double rx,ry;
    COLORREF col;
    sx=(int)(graph->sizex*ExtRate);
    sy=(int)(graph->sizey*ExtRate);
    gazoufordraw=CreateCompatibleDC(to);
    scaledgazou=CreateCompatibleDC(to);
    scalebmp=CreateCompatibleBitmap(to,sx,sy);
    oldbmp=(HBITMAP)SelectObject(gazoufordraw,graph->bmp);
    scaleoldbmp=(HBITMAP)SelectObject(scaledgazou,scalebmp);
    StretchBlt(scaledgazou,0,0,
        sx,sy,
        gazoufordraw,graph->x,graph->y,graph->sizex,graph->sizey,
        SRCCOPY);
    for(dy=0;dy<sy;dy++) {
        for(dx=0;dx<sx;dx++) {
            if(TurnFlag)col=GetPixel(scaledgazou,sx-dx,dy);
            else col=GetPixel(scaledgazou,dx,dy);
            col=GetPixel(scaledgazou,dx,dy);
            kaiten(&rx,&ry,x,y,x+dx-sx/2,y+dy-sy/2,Angle);
            if(!TransFlag || col!=RGB(255,255,255)) {
                SetPixel(to,(int)rx,(int)ry,col);
            }
        }
    }
    SelectObject(gazoufordraw,oldbmp);
    SelectObject(scaledgazou,scaleoldbmp);
    DeleteObject(scaleoldbmp);
    DeleteDC(gazoufordraw);
    DeleteDC(scaledgazou);
    return 0;
}
(編集)</pre>をつけ忘れました。 画像

Re:DrawRotaGraphF相当のコード TurnFlag

Posted: 2010年10月10日(日) 12:17
by 迷彩吹雪
for文の中にある
if(TurnFlag)col=GetPixel(scaledgazou,sx-dx,dy);
      else col=GetPixel(scaledgazou,dx,dy);
      col=GetPixel(scaledgazou,dx,dy);
if(TurnFlag){
         col=GetPixel(scaledgazou,sx-dx,dy);
      }
      else{
         col=GetPixel(scaledgazou,dx,dy);
      }
      col=GetPixel(scaledgazou,dx,dy);
と同義ですよね?
ならば、TurnFlagに関わらず
col=GetPixel(scaledgazou,dx,dy);
が実行されてしまうのではないでしょうか。
私が若輩者でどんな処理をされているか良くわかっていないので、見当違いだったらすみません……。

Re:DrawRotaGraphF相当のコード TurnFlag

Posted: 2010年10月10日(日) 12:45
by みけCAT
その通りでした。
下のcol=GetPixel(scaledgazou,dx,dy);を消したら動きました。
ありがとうございました。

ただ、拡大をかけるとかなり重いようなのでまた改良したいと思いますが...