Я создал Пользователя SQL Server Определенная Функция для вычисления чьего-то возраста, учитывая их дату рождения. Это полезно при необходимости в нем как в части запроса:
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlInt32 CalculateAge(string strBirthDate)
{
DateTime dtBirthDate = new DateTime();
dtBirthDate = Convert.ToDateTime(strBirthDate);
DateTime dtToday = DateTime.Now;
// get the difference in years
int years = dtToday.Year - dtBirthDate.Year;
// subtract another year if we're before the
// birth day in the current year
if (dtToday.Month < dtBirthDate.Month || (dtToday.Month == dtBirthDate.Month && dtToday.Day < dtBirthDate.Day))
years=years-1;
int intCustomerAge = years;
return intCustomerAge;
}
};
Это зависит от того, что вы подразумеваете под «инвертированием» цвета
Ваш код предоставляет «отрицательный» цвет.
Вы хотите преобразовать красный в голубой, зеленый в пурпурный , синий в желтом (и так далее)? Если это так, вам нужно преобразовать цвет RGB в режим HSV (вы найдете здесь , чтобы выполнить преобразование).
Затем вам просто нужно инвертировать значение Hue (изменить Оттенок
от 360-оттенок
) и преобразовать обратно в режим RGB.
РЕДАКТИРОВАТЬ: как упомянул Алекс Семенюк, изменив Оттенок
на (Оттенок + 180)% 360
- лучшее решение (оно не инвертирует оттенок, а находит противоположный цвет на цветовом круге)
Попробуйте следующее:
uint InvertColor(uint rgbaColor)
{
return 0xFFFFFF00u ^ rgbaColor; // Assumes alpha is in the rightmost byte, change as needed
}
Инвертируйте биты каждого компонента отдельно:
Color InvertMeAColour(Color ColourToInvert)
{
return Color.FromArgb((byte)~ColourToInvert.R, (byte)~ColourToInvert.G, (byte)~ColourToInvert.B);
}
РЕДАКТИРОВАТЬ: оператор ~ не работает с байтами автоматически, требуется приведение.
У вас уже есть RGB-Invert. Есть другие способы классификации цветов и, следовательно, другие определения инверсии цвета.
Но похоже, что, возможно, вам нужен контрастный цвет, и нет простой инверсии, которая работала бы для всех цветов, включая RGB (127, 127, 127).
Что вам нужно, это 1) преобразование в HSV (см. Ответ ThibThibs) и инвертирование оттенка, но также 2) проверить, не соответствует ли оттенок t ближе к середине, и если да, то переходите к полностью яркому или полностью темному.