我正在尝试根据高度设置像素颜色。我将屏幕分为两部分,如果高度小于,则根据高度设置像素 中点像素颜色设置为一种颜色,更大的值设置为不同的颜色。问题是在具有前半颜色的中间点之后设置的像素很少。 我是图形新手亲切的建议。但是通过相同的计算,我能够准确地在中间绘制线条。 我的代码: int setImagePixcels(float& pX1,float& pY1,float& pX2,float& pY2) {
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 :(得分:0)
在上半部分的中间点之后设置了少数像素 颜色。
我将开始检查中间点的定义。作为下面的代码,我不明白这个getPixelYfromValueY()函数是如何工作的。当声明的函数名称时,它看起来像是获取颜色值而不是midHeight Y位置,并且您在for循环中使用它来进行比较。我相信这是个问题。
int midHeight = vPlotXY->getPixelYFromValueY(1500);