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