-4

我如何使用 SDL 在 c++ 上绘制 cie 色度图。我现在可以绘制像素,但我不知道如何绘制线条并将它们连接起来并关闭它以形成马蹄形,有人可以帮忙吗?我被卡住了,需要尽快完成

 #include <stdlib.h>
 #include <SDL.h>
 #include <SDL_thread.h>
 void DrawPixel(SDL_Surface *screen, Uint8 R, Uint8 G, Uint8 B, float x, float y)
 {
 y = 1 - y;
 x *= 300;
 y *= 300;

 Uint32 color = SDL_MapRGB(screen->format, R, G, B);
 Uint32 *bufp;
 bufp = (Uint32 *)screen->pixels + (int)y*screen->pitch/4 + (int)x;
 *bufp = color;
 }


 int main( int argc, char* args[] )
 {
 float x[95] = {     
 0.1756,0.1752,0.1748,0.1745,0.1741,0.1740,0.1738,0.1736,0.1733,
 0.1730,0.1726,0.1721,
 0.1714,0.1703,0.1689,0.1669,0.1644,0.1611,0.1566,0.1510,0.1440,0.1355,
 0.1241,0.1096,0.0913,0.0687,0.0454,0.0235,0.0082,
 0.0039,0.0139,0.0389,0.0743,0.1142,0.1547,0.1929,
 0.2296,0.2658,0.3016,0.3374,0.3731,0.4087,0.4441,
 0.4788,0.5125,0.5448,0.5752,0.6029,0.6270,0.6482,
 0.6658,0.6801,0.6915,0.7006,0.7079,0.7140,0.7190,
 0.7230,0.7260,0.7283,0.7300,0.7311,0.7320,0.7327,
 0.7334,0.7340,0.7344,0.7346,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,
 0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347,0.7347};

 float y[95] = {0.0053,0.0053,0.0052,0.0052,0.0050,0.0050,0.0049,
 0.0049,0.0048,0.0048,0.0048,0.0048,0.0051,0.0058,0.0069
 ,0.0086,0.0109,0.0138,0.0177,0.0227,0.0297,0.0399,0.0578
 ,0.0868,0.1327,0.2007,0.2950,0.4127,0.5384,
 0.6548,0.7502,0.8120,0.8338,0.8262,0.8059,0.7816,
 0.7543,0.7243,0.6923,0.6588,0.6245,0.5896,0.5547,
 0.5202,0.4866,0.4544,0.4242,0.3965,0.3725,0.3514,
 0.3340,0.3197,0.3083,0.2993 ,0.2920,0.2859,0.2809,0.2769,
 0.2740,0.2717,0.2700,0.2689,0.2680     
 ,0.2673,0.2666,0.2660,0.2656,0.2654,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,
 0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653,0.2653};

 SDL_Surface* screen = NULL;

 //Start SDL
 SDL_Init( SDL_INIT_EVERYTHING );



 //Set up screen
 screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
 for (int i=0; i < 95; i++)
 {
   DrawPixel (screen, 255, 0,  0, x[i], y[i]);
 }


 //Update Screen
 SDL_Flip( screen );

 //Pause
 SDL_Delay( 5000 );

 //Quit SDL
 SDL_Quit();

 return 0;    
 }
4

1 回答 1

0

你给出的 X/Y 坐标是色度图的轮廓,所以你基本上只需要移动到第一个点 (x[0], y[0]),然后画一条线到每个后续点(x[i], y[i]) 绘制轮廓:

在此处输入图像描述

根据您使用它的目的,您可能还需要对背景进行通常的彩色填充。对于它的价值,人们绘制它的方式似乎有很多变化(我指的不仅仅是方法,而是结果。您可能还希望将最后一点连接回第一个点以获得封闭曲线、绘制坐标、原点/横坐标等

于 2013-08-02T06:51:18.497 回答