Я пытался конвертировать. Вот мой код:
private void RGBtoYIQbutton_Click(object sender, EventArgs e)
{
int[] vector_yiq = new int[3];
double r, g, b, y, i, q;
Bitmap bmp = new Bitmap(pictureBox1.Image);
for (int x = 0; x < bmp.Width; x++)
{
for (int y = 0; y < bmp.Height; y++)
{
Color clr = bmp.GetPixel(x, y);
r = (double)clr.R / 255;
g = (double)clr.G / 255;
b = (double)clr.B / 255;
y = Convert.ToInt32((0.299 * r + 0.587 * g + 0.114 * b) * 100);
i = Convert.ToInt32((0.596 * r - 0.274 * g - 0.322 * b) * 100);
if (i < 0)
i = Convert.ToInt32((0.596 * r - 0.274 * g - 0.322 * b + 0.5957) * 100);
q = Convert.ToInt32((0.211 * r - 0.522 * g + 0.311 * b ) * 100);
if (q < 0)
q = Convert.ToInt32((0.211 * r - 0.522 * g + 0.311 * b + 0.5226) * 100);
Color pixelColor;
pixelColor = Color.FromArgb(y, i, q);
bmp.SetPixel(x, y, pixelColor);
}
}
pictureBox1.Image = bmp;
}
Я знаю, что параметр Y имеет диапазон [0,1], параметр I имеет диапазон [-0.523,0.523], а параметр Q имеет диапазон [-0.596,0.596]. Также я знаю, что R, G и B имеют диапазон [0,255].
Нужно как-нибудь привести диапазоны или я чего-нибудь не понимаю. Я использую "if", чтобы получить положительные значения для G и B. Из-за этого я получаю неправильное изображение. Как я могу сделать этот перевод?
И вообще можно ли как-нибудь по другому задавать цвет пикселя?