2013年5月20日 星期一

00360151李飛鴻



將影像並以及兩張圖都分別存入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 (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
      //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上的心得先打個大綱,改天再仔細說明程式。


沒有留言:

張貼留言