예제 #1
0
int imPaletteFindNearest(const long* palette, int palette_count, long color)
{
  assert(palette);
  assert(palette_count);

  int lSqrDiff, lBestDiff = (unsigned int)-1;
  int pIndex = -1;

  imbyte red1, green1, blue1;
  imColorDecode(&red1, &green1, &blue1, color);

  for (int lIndex = 0; lIndex < palette_count; lIndex++, palette++)
  {
    if (color == *palette)
      return lIndex;

    imbyte red2, green2, blue2;
    imColorDecode(&red2, &green2, &blue2, *palette);

    lSqrDiff = iSqr(red1 - red2) +
               iSqr(green1 - green2) +
               iSqr(blue1 - blue2);

    if (lSqrDiff < lBestDiff)
    {
      lBestDiff = lSqrDiff;
      pIndex = lIndex;
    }
  }

  return pIndex;
}
예제 #2
0
void mostEqualDivisors(short n, short& x, short& y)
{
    short  i;

    i = iSqr( n );
    if( n % i != 0 )
        if( n % (i+1) == 0 )
            i++;
    if( i < (n/i) )
        i = n/i;

    x = n/i;
    y = i;
}