將畫面從中切成兩半,並在中間切割處畫上紅線,同時兩邊分別各有一頂不同皇冠,當頭移至右邊時,戴上右邊黃冠,左邊時,戴上左邊皇冠。
考試結果:
大致上全部都有做出來,但是唯獨出現一個小敗筆,就是皇冠無法正確的戴上頭頂,會卡在額頭上,所幸在考完試後,與同學討論,發現自己的錯誤地方,也順利解決了問題。
錯誤地方為紅色標示處:
int mousex1=mouseX;
int mousey1=mouseY;
if(mousex1<pImg->width/2){
if( (logoImg->height + mousey1) < pImg->height) {
for (int y=0; y<logoImg->height; y++) {
uchar* ptr1=(uchar*) (logoImg->imageData +y*logoImg->widthStep);
uchar* ptr2=(uchar*) (pImg->imageData +(mousey1+y)*pImg->widthStep);
for (int x=0; x<logoImg->width; x++) {
if(ptr1[3*(x)]<250&& ptr1[3*(x)+1]<250&& ptr1[3*(x)+2]<250){
ptr2[3*(x+mousex1)]=ptr1[3*(x) ];
ptr2[3*(x+mousex1)+1]=ptr1[3*( x)+1];
ptr2[3*(x+mousex1)+2]=ptr1[3*( x)+2];
}
}
}
}
}
else{
//int mousex2=mouseX+640;
//int mousey2=mouseY+640;
if( (logoImg2->height + mousey1) < pImg->height) {
for (int y=0; y<logoImg2->height; y++) {
uchar* ptr1=(uchar*) (logoImg2->imageData +y*logoImg2->widthStep);
uchar* ptr2=(uchar*) (pImg->imageData +(mousey1+y)*pImg->widthStep);
for (int x=0; x<logoImg2->width; x++) {
if(ptr1[3*(x)]<250&& ptr1[3*(x)+1]<250&& ptr1[3*(x)+2]<250){
ptr2[3*(x+mousex1)]=ptr1[3*(x) ];
ptr2[3*(x+mousex1)+1]=ptr1[3*( x)+1];
ptr2[3*(x+mousex1)+2]=ptr1[3*( x)+2];
}
}
}
}
}
經與同學討論後,發現只是自己對座標的認知錯誤,導致參數設定有問題,自己原本所想的剛好與正確的方式相反,所以反而越改越下面,不過在同學的幫忙下,順利地調整成正確的顯示方式。
沒有留言:
張貼留言