- Файл
- История файлов
- Использование файла
3D_RGB_profile_of_the_Smooth_Cool_Warm_diverging_color_gradient_by_Kenneth_Moreland.png (640 × 480 пикселей, размер файла: 30 КБ, MIME - тип: изображение / PNG )
Это изображение можно воссоздать с использованием векторной графики в виде файла SVG . У этого есть несколько преимуществ; см. Commons: Media для очистки для получения дополнительной информации. Если доступна SVG-форма этого изображения, загрузите ее, а затем замените этот шаблон на . Рекомендуется назвать SVG-файл "3D RGB-профиль расходящегося цветового градиента Smooth Cool Warm by Kenneth Moreland.svg" - тогда доступная версия шаблона Vector (или Vva ) не нуждается в параметре имени нового изображения . {{vector version available|new image name}} |
Резюме
Описание3D RGB-профиль расходящегося градиента Smooth Cool Warm от Kenneth Moreland.png | Английский: 3D RGB-профиль расходящегося цветового градиента Smooth Cool Warm [1] Кеннет Морленд [2] |
Дата | |
Источник | Наша работа |
Автор | Адам маевски |
Другие версии |
|
Лицензирование
Я, владелец авторских прав на это произведение, публикую его под следующей лицензией:
| Этот файл находится под лицензией Creative Commons Attribution-Share Alike 4.0 International . | |
https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 Лицензия Creative Commons Attribution-Share Alike 4.0 правдаправда |
c src код
#include // strncat#include // malloc#include // log10// цвет = триплет RGB = (таким образом, три байта на пиксель) в порядке красный, зеленый, затем синий // цвет = 3 байта // компонент цвета (канал) = 1 байт = число от 0 до 255 = символ без знака// размер виртуального 2D-массива пикселей // каждый сектор имеет цвет RGB int iWidth = 600 ; int iHeight ; //// размер динамического одномерного массива unsigned char * data ; size_t ColorSize = 3 ; // RGB = количество цветовых компонентов = каналы size_t ArrayLength ; // количество элементов массива 1D = ENumber = iWidth * iHeight * ColorSize size_t ElementSize ; // размер элемента массива в байтах size_t ArraySize ; // размер массива в байтах = ElementSize * ArrayLength// ppm файл P6 size_t HeaderSize ; // размер заголовка файла P6 в байтах size_t FileSize ; // = Размер заголовка + Размер массива [байты]// выдает позицию 2D точки (ix, iy) в 1D массиве; использует также глобальные переменные: iWidth, ColorSize int Give_i ( int iX , int iY ) { return ( iX + iY * iWidth ) * ColorSize ; }/ * на основе функции Delphi Витольда Яника https://commons.wikimedia.org/wiki/File:HSV-RGB-comparison.svg ввод: позиция вывод: массив c = цвет RGB * / void GiveRainbowColor ( двойная позиция , беззнаковый символ c []) { беззнаковый символ nmax = 6 ; / * количество цветовых сегментов * / double m = nmax * position ; int n = ( int ) m ; // целое число m двойной f = m - n ; // доля m без знака char t = ( int ) ( f * 255 ); / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { if ( position - ( int ) position == 0.0 ) position = 1.0 ; else position = position - ( int ) позиция ;} // градиент с 6 сегментами switch ( n ) { case 0 : { c [ 0 ] = 255 ; c [ 1 ] = t ; c [ 2 ] = 0 ; перерыв ; }; случай 1 : { c [ 0 ] = 255 - t ; c [ 1 ] = 255 ; c [ 2 ] = 0 ; перерыв ; }; случай 2 : { c [ 0 ] = 0 ; c [ 1 ] = 255 ; c [ 2 ] = t ; перерыв ; }; случай 3 : { c [ 0 ] = 0 ; c [ 1 ] = 255 - t ; c [ 2 ] = 255 ; перерыв ; }; случай 4 : { c [ 0 ] = t ; c [ 1 ] = 0 ; c [ 2 ] = 255 ; перерыв ; }; случай 5 : { c [ 0 ] = 255 ; c [ 1 ] = 0 ; c [ 2 ] = 255 - t ; перерыв ; }; по умолчанию : { c [ 0 ] = 255 ; c [ 1 ] = 0 ; c [ 2 ] = 0 ; перерыв ; }; }; // case }/ * Ваша новая палитра отличается и уродлива. Граница между красным и желтым намного хуже, чем раньше. красно-желтая прерывистость ... сбивает с толку, раздражает. .. для меня, по крайней мере. https://gitlab.com/adammajewski/LinasArtGallery_MandelbrotSet http://linas.org/art-gallery/index.html http://linas.org/art-gallery/src/fractal/image/flo2mtv.c struct rgb { char r; char g; char b; }; статическая структура rgb vlt [256]; void make_cmap (void) { int я, j; struct rgb черный; черный. r = черный. g = черный. b = 0x0; для (я = 0; я <256; я ++) vlt [я] = черный; // настраиваем поисковую таблицу по умолчанию // переход к синему цвету для (i = 0; i <60; i ++) { vlt [i] .r = 0; vlt [i] .g = 0; vlt [i] .b = (char) i * 3; } // переход от синего к зеленому для (i = 60; i <120; i ++) { vlt [i] .r = 0; vlt [i] .g = (char) (i-60) * 3; vlt [я] .b = (символ) (120-я) * 3; } // переход от зеленого к желтому для (i = 120; i <180; i ++) { // vlt [i] .r = (char) (((i-120) * 7) / 2); vlt [i] .r = (char) (210 - (7 * (180-i) * (180-i)) / 120); vlt [i] .g = (символ) (210 -i / 4); vlt [i] .b = 0; } // переход от желтого к красному (розовому) for (i = 180; i <240; i ++) { vlt [i] .r = (char) (210 + (3 * (i-180)) / 4); vlt [i] .g = (char) (510 - 2 * i); vlt [i] .b = (char) (i-180) / 3; } }* / void GiveLinasColor ( double position , unsigned char c []) { / * на основе кода Линаса Вепстаса 16 января 1994 г .: void make_cmap (void) * / int i ; int iMax = 239 ; i = ( int ) ( iMax -1 ) * позиция ; c [ 0 ] = c [ 1 ] = c [ 2 ] = 0 ; / * настраиваем поисковую таблицу по умолчанию * / // градиент с 4 сегментами / * переход от черного к синему * / if ( i < 60 ) { c [ 0 ] = 0 ; c [ 1 ] = 0 ; c [ 2 ] = ( символ без знака ) я * 3 ; } / * переход от синего к зеленому * / if ( i > = 60 && i < 120 ) { c [ 0 ] = 0 ; c [ 1 ] = ( символ без знака ) ( i -60 ) * 3 ; c [ 2 ] = ( символ без знака ) ( 120 - i ) * 3 ; } / * переход от зеленого к желтому * / if ( i > = 120 && i < 180 ) { / * vlt [i] .r = (char) (((i-120) * 7) / 2); * / c [ 0 ] = ( символ без знака ) ( 210 - ( 7 * ( 180 - i ) * ( 180 - i )) / 120 ); c [ 1 ] = ( символ без знака ) ( 210 - i / 4 ); c [ 2 ] = 0 ; } / * переход от желтого к красному (розовому) * / if ( i > = 180 && i < iMax ) { c [ 0 ] = ( unsigned char ) ( 210 + ( 3 * ( i -180 )) / 4 ); c [ 1 ] = ( символ без знака ) ( 510 - 2 * i ); c [ 2 ] = ( символ без знака ) ( я -180 ) / 3 ; } }// https://github.com/Gnuplotting/gnuplot-palettes/blob/master/magma.pal void GiveMagmaColor ( двойная позиция , символ без знака c []) { двойной x , x2 , x3 , x4 , x5 , x6 , x7 , x8 ; двойной R , G , B ; // x = позиция ; х2 = х * х ; х3 = х * х2 ; х4 = х * х3 ; х5 = х * х4 ; х6 = х * х5 ; х7 = х * х6 ; х8 = х * х7 ; // найти с помощью https://arachnoid.com/polysolve/ R = -2.1104070317295411e-002 + 1.0825531148278227e + 000 * х -7.2556742716785472e-002 * х2 + 6.1700693562312701e + 000 * х3 -1.1408475082678258e + 001 * х4 + 5.2341915705822935e + 000 * x5 ; если ( R < 0,0 ) R = 0,0 ; // небольшая поправка G = ( -9.6293819919380796e-003 + 8.1951407027674095e-001 * x -2.9094991522336970e + 000 * x2 + 5.4475501043849874e + 000 * x3 -2.3446957347481536e + 000 * x4 ); если ( G < 0,0 ) G = 0,0 ; Б = 3.4861713828180638e-002 -5.4531128070732215e-001 * х + 4.9397985434515761e + 001 * х2 -3.4537272622690250e + 002 * х3 + 1.1644865375431577e + 003 * х4 -2.2241373781645634e + 003 * х5 + 2.4245808412415154e + 003 * х6 -1,3968425226952077 е + 003 * x7 + 3.2914755310075969e + 002 * x8 ; // изменить диапазон c [ 0 ] = ( unsigned char ) 255 * R ; // R c [ 1 ] = ( символ без знака ) 255 * G ; // G c [ 2 ] = ( символ без знака ) 255 * B ; // B }void GiveGrayColorL ( двойная позиция , символ без знака c []) { символ без знака X = 255 - 255 * позиция ; // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorNL2 ( двойная позиция , символ без знака c []) { символ без знака X = 255 - 255 * ( позиция * позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorNL3 ( двойная позиция , символ без знака c []) { символ без знака X = 255 - 255 * ( позиция * позиция * позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorSqrt ( двойная позиция , символ без знака c []) { символ без знака X = 255 * sqrt ( позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}// от зеленого к черному = void GiveColorGreen ( двойная позиция , unsigned char c []) { символ без знака X = 255 - 255 * ( позиция * позиция * позиция ); // изменить диапазон c [ 0 ] = 0 ; // R c [ 1 ] = X ; // G c [ 2 ] = 0 ; // B}void GiveLinas2Color ( double position , unsigned char c []) { / * на основе кода Линаса Вепстаса 16 января 1994 г .: void make_cmap (void) * / // градиент с 4 сегментами 0-0,25-0,5-0,75-1,0 / * переход от черного к синему = (0,0; 0,25)) * / if ( position < 0,25 ) { c [ 0 ] = 0 ; c [ 1 ] = 0 ; c [ 2 ] = 708 * позиция ;; // B return ; } / * переход от синего к зеленому = (0,25; 0,5) * / if ( position < 0,5 ) { c [ 0 ] = 0 ; // R c [ 1 ] = -177 + 708 * позиция ; // G c [ 2 ] = 354 - 708 * position ;; // B return ; } / * переход от зеленого к желтому = (0,5; 0,75) * / if ( position < 0,75 ) { c [ 0 ] = -420 + 840 * позиция ; // R c [ 1 ] = 219-84 * позиция ; // G c [ 2 ] = 0 ; возврат ; } / * позиция> 0,75: переход от желтого к красному (розовому) * / c [ 0 ] = 84 + 168 * позиция ; // R c [ 1 ] = 516-480 * позиция ; // G c [ 2 ] = -57 + 76 * позиция ; // B }// http://www.kennethmoreland.com/color-maps/ void GiveColorCoolWarm ( двойная позиция , символ без знака c []) { двойной R , G , B ; двойной x = позиция ; двойной x2 = x * x ; двойной x3 = x * x2 ; двойной x4 = x * x3 ; двойной x5 = x * x4 ; двойной x6 = x * x5 ; R = 2.4070949725529692e-001 + 8.3340565013768031e-001 * x + 2.6191922175556543e + 000 * x2 - 4.0994936709055061e + 000 * x3 + 1.1014553405733734e + 000 * x4 ; G = 2.8978300321243283e-001 + 2.2641158553110725e + 000 * х - 6.8483016873914799e + 000 * х2 + 3.0238558676188145e + 001 * х3 - 7.0431595279051223e + 001 * х4 + 6.8583306445298092e + 001 * х5 - 2.4054295028042432e + 001 * x6 ; B = 7,4391703318514535e-001 + 1,8345430120497781e + 000 * x - 3,1885763361607244e + 000 * x2 - 8,4015787106949880e-001 * x3 + 1,6162754134259683e + 000 * x4 ; // изменить диапазон c [ 0 ] = ( unsigned char ) 255 * R ; // R c [ 1 ] = ( символ без знака ) 255 * G ; // G c [ 2 ] = ( символ без знака ) 255 * B ; // B }void GiveGrayGammaColor ( double position , unsigned char c []) { / * #from gnuplot gamma = 2.2 цвет (серый) = серый ** (1./gamma) установить модель палитры Функции RGB цвет (серый), цвет (серый), цвет (серый) # Черно-белая палитра с коррекцией гаммы * / двойная гамма = 2.2 ; двойной p = pow ( положение , 1.0 / гамма ); символ без знака X = 255 * p ; // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B }void GiveGrayColorNL3Wave2 ( двойная позиция , символ без знака c []) { int сегменты = 2 ; позиция = сегменты * позиция ; / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { int p = ( int ) position ; position = position - p ; // дробная часть if ( p % 2 ) { position = 1.0 - position ;} // обратный градиент } символ без знака X = 255 - 255 * ( позиция * позиция * позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorNL3Wave10 ( двойная позиция , символ без знака c []) { int сегментов = 10 ; позиция = сегменты * позиция ; / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { int p = ( int ) position ; position = position - p ; // дробная часть if ( p % 2 ) { position = 1.0 - position ;} // обратный градиент } символ без знака X = 255 - 255 * ( позиция * позиция * позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorSqrtWave ( двойная позиция , беззнаковый символ c []) { int сегменты = 10 ; позиция = сегменты * позиция ; / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { int p = ( int ) position ; position = position - p ; // дробная часть if ( p % 2 ) { position = 1.0 - position ;} // обратный градиент } символ без знака X = 255 * sqrt ( позиция ); // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorLWave ( двойная позиция , символ без знака c []) { int сегментов = 10 ; позиция = сегменты * позиция ; / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { int p = ( int ) position ; position = position - p ; // дробная часть } символ без знака X = 255 - 255 * позиция ; // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}void GiveGrayColorLWaveInverted ( двойная позиция , символ без знака c []) { int сегментов = 10 ; позиция = сегменты * позиция ; / * если позиция> 1, то у нас есть повторение цветов, это может быть полезно * / if ( position > 1.0 ) { int p = ( int ) position ; position = position - p ; // дробная часть if ( p % 2 ) { position = 1.0 - position ;} // обратный градиент } символ без знака X = 255 - 255 * позиция ; // изменить диапазон c [ 0 ] = X ; // R c [ 1 ] = X ; // G c [ 2 ] = X ; // B}