#include <stdio.h>
#include <math.h>
typedef struct {
double r;
double g;
double b;
} RGB;
typedef struct {
double h;
double s;
double v;
} HSV;
HSV rgb_to_hsv(RGB rgb) {
HSV hsv;
double min, max, delta;
min = rgb.r < rgb.g ? rgb.r : rgb.g;
min = min < rgb.b ? min : rgb.b;
max = rgb.r > rgb.g ? rgb.r : rgb.g;
max = max > rgb.b ? max : rgb.b;
hsv.v = max;
delta = max - min;
if (max > 0.0) {
hsv.s = (delta / max);
} else {
hsv.s = 0.0;
hsv.h = NAN;
return hsv;
}
if (rgb.r >= max)
hsv.h = (rgb.g - rgb.b) / delta;
else if (rgb.g >= max)
hsv.h = 2.0 + (rgb.b - rgb.r) / delta;
else
hsv.h = 4.0 + (rgb.r - rgb.g) / delta;
hsv.h *= 60.0;
if (hsv.h < 0.0)
hsv.h += 360.0;
return hsv;
}
void compare_saturation(RGB color1, RGB color2) {
HSV hsv1 = rgb_to_hsv(color1);
HSV hsv2 = rgb_to_hsv(color2);
if (hsv1.s > hsv2.s) {
printf("Color 1 (%.0f, %.0f, %.0f) is more saturated\n", color1.r * 255, color1.g * 255, color1.b * 255);
} else if (hsv2.s > hsv1.s) {
printf("Color 2 (%.0f, %.0f, %.0f) is more saturated\n", color2.r * 255, color2.g * 255, color2.b * 255);
} else {
printf("Both colors have the same saturation\n");
}
}
int main() {
RGB color1 = {1.0, 0.0, 0.0}; // Pure red
RGB color2 = {0.78, 0.39, 0.39}; // Less saturated red
compare_saturation(color1, color2);
return 0;
}
#include "FiveWin.ch"
function Main()
local nRed := CLR_RED
local nRedLessSaturated := RGB( 255, 1, 1 )
MsgInfo( RGBTOHSV( nRed ) > RGBTOHSV( nRedLessSaturated ) )
return nil
#pragma BEGINDUMP
#include <hbapi.h>
#include <math.h>
typedef struct {
double r;
double g;
double b;
} RGB;
typedef struct {
double h;
double s;
double v;
} HSV;
HSV rgb_to_hsv(RGB rgb) {
HSV hsv;
double min, max, delta;
min = rgb.r < rgb.g ? rgb.r : rgb.g;
min = min < rgb.b ? min : rgb.b;
max = rgb.r > rgb.g ? rgb.r : rgb.g;
max = max > rgb.b ? max : rgb.b;
hsv.v = max;
delta = max - min;
if (max > 0.0) {
hsv.s = (delta / max);
} else {
hsv.s = 0.0;
hsv.h = NAN;
return hsv;
}
if (rgb.r >= max)
hsv.h = (rgb.g - rgb.b) / delta;
else if (rgb.g >= max)
hsv.h = 2.0 + (rgb.b - rgb.r) / delta;
else
hsv.h = 4.0 + (rgb.r - rgb.g) / delta;
hsv.h *= 60.0;
if (hsv.h < 0.0)
hsv.h += 360.0;
return hsv;
}
HB_FUNC( RGBTOHSV )
{
int color = hb_parnl( 1 );
RGB rgbColor;
HSV hsvColor;
rgbColor.r = (double)( color & 255 );
rgbColor.g = (double)( ( color >> 8 ) & 255 );
rgbColor.b = (double)( ( color >> 16 ) & 255 );
hsvColor = rgb_to_hsv( rgbColor );
hb_retnd( hsvColor.s );
}
#pragma ENDDUMP
#if !defined(NAN)
extern float _RTLENTRY _EXPDATA __ieee_32_p_nanq;
#define NAN __ieee_32_p_nanq
#endif
? hb_jsonEncode( int2rgb( 13882323 ) )
function Int2RGB( nColor )
local aRGB := { 0, 0, 0 }
aRGB[1] := Int( nColor / 65536 )
aRGB[2] := Int( ( nColor / 256 ) % 256 )
aRGB[3] := Int( nColor % 256 )
return aRGB
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: No registered users and 104 guests