Home > Net >  How to convert HSV to RGB in flutter
How to convert HSV to RGB in flutter

Time:05-12

I'm using this code to convert RGB to HSV. now i have to revert back to RGB. is that any way to convert this in flutter??

I just recently started working in flutter, please help me out, I'm stuck here. Thank you so much in advance.

rgbToHsv(int r1, int g1, int b1) {
// R, G, B values are divided by 255
// to change the range from 0..255 to 0..1:
  double r = r1 / 255.0;
  double g = g1 / 255.0;
  double b = b1 / 255.0;

  // h, s, v = hue, saturation, value

  var cmax = [r, g, b].reduce(max); // maximum of r, g, b
  var cmin = [r, g, b].reduce(min); // minimum of r, g, b
  var diff = cmax - cmin; // diff of cmax and cmin.

  var h;
  var s;
  var v;

//Get value of h
  if (cmax == cmin) {
    h = 0;
  } else if (cmax == r) {
    h = (60 * ((g - b) / diff)   360) % 360;
  } else if (cmax == g) {
    h = (60 * ((b - r) / diff)   120) % 360;
  } else if (cmax == b) {
    h = (60 * ((r - g) / diff)   240) % 360;
  }

  //Get value of s
  if (cmax == 0) {
    s = 0;
  } else {
    s = (diff / cmax) * 100;
  }

  //Get value of v
  v = cmax * 100;

//Convert HSV [360, 100, 100] to HSV [256, 256, 256]
  double h_256 = (h / 360) * 255;
  double s_256 = (s / 100) * 255;
  double v_256 = (v / 100) * 255;

  int h_256_int = h_256.toInt();
  int s_256_int = s_256.toInt();
  int v_256_int = v_256.toInt();

//Convert to HSV HEX
  var hex_h = h_256_int.toRadixString(16);
  var hex_s = s_256_int.toRadixString(16);
  var hex_v = v_256_int.toRadixString(16);

//MERGE HSV HEX
  var finalColor = hex_h   hex_s   hex_v;
  print("HSV HEX:"   finalColor.toUpperCase());

  /////RGB TRANS>>>>>>>>>>>>>>>>>
  ////////RGB TRANS>>>>>>>>>>>>>>>>>
  ////////RGB TRANS>>>>>>>>>>>>>>>>>
  ////////RGB TRANS>>>>>>>>>>>>>>>>>

  var _h = hextToint(hex_h);
  var _s = hextToint(hex_s);
  var _v = hextToint(hex_v);

  print(_h);
  print(_s);
  print(_v);

  print(hsvToRgb(_h.toDouble(), _s.toDouble(), _v.toDouble()));
  //return rgb;
}

CodePudding user response:

this might help. I have used this in one of my projects.

String hsvToRgb(double H, double S, double V) {
        int R, G, B;
    
        H /= 360;
        S /= 100;
        V /= 100;
    
        if (S == 0) {
            R = (V * 255).toInt();
            G = (V * 255).toInt();
            B = (V * 255).toInt();
        } else {
            double var_h = H * 6;
            if (var_h == 6) var_h = 0; // H must be < 1
            int var_i = var_h.floor(); // Or ... var_i =
            // floor( var_h )
            double var_1 = V * (1 - S);
            double var_2 = V  (1 - S  (var_h - var_i));
            double var_3 = V  (1 - S  (1 - (var_h - var_i)));
    
            double var_r;
            double var_g;
            double var_b;
            if (var_i == 0) {
                var_r = V;
                var_g = var_3;
                var_b = var_1;
            } else if (var_i == 1) {
                var_r = var_2;
                var_g = V;
                var_b = var_1;
            } else if (var_i == 2) {
                var_r = var_1;
                var_g = V;
                var_b = var_3;
            } else if (var_i == 3) {
                var_r = var_1;
                var_g = var_2;
                var_b = V;
            } else if (var_i == 4) {
                var_r = var_3;
                var_g = var_1;
                var_b = V;
            } else {
                var_r = V;
                var_g = var_1;
                var_b = var_2;
            }
    
            R = (var_r * 255).toInt(); // RGB results from 0 to 255
            G = (var_g * 255).toInt();
            B = (var_b * 255).toInt();
        }
    
        String rs = R.toRadixString(16);
        String gs = G.toRadixString(16);
        String bs = B.toRadixString(16);
    
        if (rs.length == 1) rs = "0"   rs;
        if (gs.length == 1) gs = "0"   gs;
        if (bs.length == 1) bs = "0"   bs;
        return "#"   rs   gs   bs;
    }

CodePudding user response:

RGB to HSV

HSVColor rgbToHSV(int r, int g, int b, {double opacity = 1}) {
  return HSVColor.fromColor(Color.fromRGBO(r, g, b, opacity));
}

HSV to RGB

List<int> hsvToRGB(HSVColor color) {
  //convert to color
  final c = color.toColor();
  return [c.red, c.blue, c.green];
}

To use HSVColor use myHSVcolor.toColor().

More about HSV Color.

  • Related