2014-07-17 181 views
0

我想根據高度設置像素顏色。如果高度小於 ,我將屏幕分爲兩部分,並根據高度設置像素。中間點像素顏色設置爲一種顏色,而較大的值設置爲不同的顏色。問題是少數像素在中間點之後被設置爲前半色。 我是新來的圖形請提出建議。但是通過相同的計算,我可以在中間畫出線條。 我的代碼: INT setImagePixcels(浮動& PX1,浮& PY1,浮& PX2,浮動& PY2) {Qt QImage-> setPixel超出預期範圍

int lValue = 0 ,pixelValY2=0, pixelValY1=0, pixelValX1=0, pixelValX2=0 ; 
int width= 0, height=0 , maxY=0,maxX=0,startx=0,starty=0; 
FILE *myFile=NULL; 
QRgb rgblo; 

pixelValX1= vPlotXY->getPixelXFromValueX(pX1); //px1 is x1 
pixelValX2= vPlotXY->getPixelXFromValueX(pX2); // px2 is x2 

startx = vPlotXY->vAxisPositionInPixels[LEFT]; //Starting point of x 
starty = vPlotXY->vAxisPositionInPixels[TOP]; //starting point of y 

pixelValY1= vPlotXY->getPixelYFromValueY(pY1);  //py1 is y1 
pixelValY2= vPlotXY->getPixelYFromValueY(pY2);  //py2 is y2 


width = (vPlotXY->vAxisPositionInPixels[RIGHT]-vPlotXY->vAxisPositionInPixels[LEFT]); //width of the screen 
height =(vPlotXY->vAxisPositionInPixels[BOTTOM]-vPlotXY->vAxisPositionInPixels[TOP]); //height of the screen 

float slope =(float) (pixelValY2-pixelValY1)/(pixelValX2-pixelValX1); 


    myFile = fopen("C:\\MyLearning\\myData.txt","w+"); 
    if(!myFile) 
    { 
    // cout<<"error"; failure. 
    } 

//int dy = (pixelValY2-pixelValY1); // This the delta for y 
//int dx = (pixelValX2-pixelValX1); // This the delta for x 
maxY = vPlotXY->vAxisPositionInPixels[BOTTOM]; 
maxX = vPlotXY->vAxisPositionInPixels[RIGHT]; 

for(int y= starty;y<maxY;y++) 
{  
    for(int x= startx;x<maxX;x++) 
    { 
     int midHeight = vPlotXY->getPixelYFromValueY(1500); 
     //float lineVal = (dy*x)-(dx*y)+(dx); 
     //if((lineVal< 0)&& (axisVal[x-startx][y-starty]==0)) 
     if(y<midHeight) 
     { 
      vColor = 1; 
     } 
     else 
     { 

       vColor = 2; 

     } 

     // axisVal[x-startx][y-starty]=vColor; 


      switch(vColor) 
      { 
       case GridColor::CYAN: 
       rgblo= qRgb(0,255,255); 

       break; 
       case GridColor::SPRINGGREEN: 
       rgblo= qRgb(0 ,250, 154); 
       break; 
       case GridColor::GREEN: 
        rgblo= qRgb(0 ,205, 102); 
       break; 

       case GridColor::DODERBLUE: 
        rgblo= qRgb(30 ,144 ,255); 
       break; 
       case GridColor::SGI_SALMON: 
        rgblo= qRgb(198, 113, 113); 
       break; 
       case GridColor::SGI_OLIVERDRAB: 
        rgblo= qRgb(142 ,142 ,56); 
       break; 
       case GridColor::SGI_LIGHTBLUE: 
       break; 
       case GridColor::MEDIUMORCHID: 
        rgblo= qRgb(186,85,211); 
       break; 
       case GridColor::YELLOW: 
        rgblo= qRgb(255,255,0); 
       break; 
       case GridColor::MEDIUMPURPLE: 
        rgblo= qRgb(147, 112, 219); 
       break; 
       default: 
        rgblo= qRgb(255 ,255,255); 
        break; 

      } 
       vImage->setPixel(x-75,y-89,rgblo); 


     //fprintf(myFile, "(x=%d, y=%d)=(%d)", x,y,axisVal[x][y]); 
     //} 
    } 
    fprintf(myFile, "\n"); 
} 
fclose(myFile); 

return lValue; 

}

回答

0

幾個像素被中間點之後設置前半部分顏色爲 。

我將開始檢查中間點的定義。作爲下面的代碼,我不明白getPixelYfromValueY()函數是如何工作的。作爲聲明的函數名稱,它看起來像獲取顏色值而不是midHeight Y位置,並且您可以使用它在for循環中進行比較。我相信這是問題。

int midHeight = vPlotXY->getPixelYFromValueY(1500); 
+0

getPixelValueFromY是該函數返回圖形或繪圖區域中標籤1500的像素值。標籤值1500(Y軸刻度,最大3000),10000(X軸最大)。我使用函數能夠在(0,1500)(x1,y1)和(10000,1500)(x2,y2)之間畫出一條線,恰好在繪圖區的中間。但setpixel超出了界限。 – KBoya