將影像並以及兩張圖都分別存入ptr1 ptr2 ptr3
for (int y=0; y<logoImg->height; y++) {
uchar* ptr1=(uchar*) (pImg2->imageData +(y)*pImg2->widthStep);
uchar* ptr2=(uchar*) (logoImg->imageData + y*logoImg->widthStep);
uchar* ptr3=(uchar*) (logoImg2->imageData + y*logoImg2->widthStep);
以下這兩個for迴圈則是將左右兩邊固定的圖顯示出來
若該區塊顏色不等於白色則顯示該皇冠應有圖色塊(去背),並且把ptr2 (logoImg)的圖片放在X+20這個位置上
以下這兩個for迴圈則是將左右兩邊固定的圖顯示出來
若該區塊顏色不等於白色則顯示該皇冠應有圖色塊(去背),並且把ptr2 (logoImg)的圖片放在X+20這個位置上
for (int x=0; x<logoImg->width; x++) {
if(ptr2[3*x]!=255){
ptr1[3*(x+20)]=ptr2[3*(x)] ;
ptr1[3*(x+20)+1]=ptr2[3*(x)+1] ;
ptr1[3*(x+20)+2]=ptr2[3*(x)+2] ;
}
}
若該區塊顏色不等於白色則顯示該皇冠應有圖色塊(去背),並且把ptr3 (logoImg)的圖片放在X+180這個位置上
for (int x=0; x<logoImg2->width; x++) {
if(ptr3[3*x]!=255){
ptr1[3*(x+180)]=ptr3[3*(x)] ;
ptr1[3*(x+180)+1]=ptr3[3*(x)+1] ;
ptr1[3*(x+180)+2]=ptr3[3*(x)+2] ;
}
}
}
以下這段是利用身體的移動去感應左右邊的皇冠
mouseX<150 表示所感應出來的值若位於整個畫面的0~150
則圖會依照MOUSEX,也就是所感應出來的圖片位置判斷出為logoImg
//lg
for (int y=0; y<logoImg->height; y++) {
uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-160)*pImg2->widthStep);
uchar* ptr2=(uchar*) (logoImg ->imageData + y*logoImg ->widthStep);
uchar* ptr3=(uchar*) (logoImg2 ->imageData + y*logoImg ->widthStep);
for (int x=0; x<logoImg->width; x++) {
if(ptr2[3*x]!=255 && mouseX<150){
ptr1[3*(x+mouseX-100)]=ptr2[3*(x)] ;
ptr1[3*(x+mouseX-100)+1]=ptr2[3*(x)+1] ;
ptr1[3*(x+mouseX-100)+2]=ptr2[3*(x)+2] ;}
}
}
mouseX>170 表示所感應出來的值若位於整個畫面的170以上
則圖會依照MOUSEX,也就是所感應出來的圖片位置判斷出為logoimg2
mouseX>170 表示所感應出來的值若位於整個畫面的170以上
則圖會依照MOUSEX,也就是所感應出來的圖片位置判斷出為logoimg2
//lg2
for (int y=0; y<logoImg2->height; y++) {
uchar* ptr1=(uchar*) (pImg2->imageData +(y+mouseY-160)*pImg2->widthStep);
uchar* ptr2=(uchar*) (logoImg2->imageData + y*logoImg2->widthStep);
for (int x=0; x<logoImg2->width; x++) {
if(ptr2[3*x]!=255 && mouseX > 170){
ptr1[3*(x+mouseX-20)]=ptr2[3*(x)] ;
ptr1[3*(x+mouseX-20)+1]=ptr2[3*(x)+1] ;
ptr1[3*(x+mouseX-20)+2]=ptr2[3*(x)+2] ;}
}
}
這次很可惜只有把紅線跟頭上的圖像做出來而已
*無法左半部右半部出現兩張不同圖
*無法左半部右半部固定出現兩張圖
以上是將這個兩部分的步驟加以註解
*無法左半部右半部出現兩張不同圖
*無法左半部右半部固定出現兩張圖
以上是將這個兩部分的步驟加以註解
過程:
這次上機考只有把紅線以及頭上的皇冠顯示出來,後面顯示那兩張固定的圖片,我當初想應該用相框的概念就能把它顯示出來,但打了就是不會顯示,不然就是當掉,後面也先跳過這邊,試試看做左右邊範圍限制的兩個皇冠,也是卡在顯示不出來。後來才發現條件限制的位置放錯了 if(ptr2[3*x]!=255 && mouseX<150)應該要這樣,而圖片顯示也不用跟著MOUSEX走,只要X+多少這樣就可以了,另外空間也都可再重新宣告一次就可以。
心得:
程式沒打出來當下,真的蠻佩服那些成功打出來的人,很多東西真的是看到才知道,看到那些正確的程式碼,也才領悟到,TRACE程式的目的是多麼重要,課後考完也有留在教室詢問同學要如何寫出來,也順便將BLOG上的心得先打個大綱,改天再仔細說明程式。
沒有留言:
張貼留言