В последнее время я учусь использовать цветовую матрицу — большую часть кода я успешно придумал сам, он что-то делает, но я понятия не имею, правильно ли это. Я также понятия не имею, что делает последняя строка в матрице. Есть ли у кого-нибудь из вас идеи? Любая помощь и/или дальнейшее чтение приветствуются. Всем заранее спасибо.
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
namespace bitmaps
{
public partial class Matrix : Form
{
public Matrix(Bitmap btm)
{
InitializeComponent();
img = btm;
main();
}
Bitmap img;
public float[][] matrix= {
new float[] {1, 0, 0, 0, 0}, //R
new float[] {0, 1, 0, 0, 0}, //G
new float[] {0, 0, 1, 0, 0}, //B
new float[] {0, 0, 0, 1, 0}, //Alpha
new float[] {0, 0, 0, 0, 1}
};
void main()
{
if (img == null) return;
ImageAttributes imageAttributes = new ImageAttributes();
int w= img.Width;
int h= img.Height;
ColorMatrix colorMatrix = new ColorMatrix(matrix);
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
Bitmap bmp = new Bitmap(w, h);
using (Graphics grf = Graphics.FromImage(bmp))
{
grf.DrawImage(img,
new Rectangle(0, 0, w, h),
0, 0, w, h,
GraphicsUnit.Pixel,
imageAttributes);
}
if (this.BackgroundImage != null)
{
this.BackgroundImage.Dispose();
}
this.BackgroundImage = bmp;
}
private void trackBar1_Scroll(object sender, EventArgs e) { matrix[0][0] = (float)trackBar1.Value / 100f; main(); }
private void trackBar2_Scroll(object sender, EventArgs e) { matrix[1][0] = (float)trackBar2.Value / 100f; main(); }
private void trackBar3_Scroll(object sender, EventArgs e) { matrix[2][0] = (float)trackBar3.Value / 100f; main(); }
private void trackBar4_Scroll(object sender, EventArgs e) { matrix[3][0] = (float)trackBar4.Value / 100f; main(); }
private void trackBar5_Scroll(object sender, EventArgs e) { matrix[0][1] = (float)trackBar5.Value / 100f; main(); }
private void trackBar6_Scroll(object sender, EventArgs e) { matrix[1][1] = (float)trackBar6.Value / 100f; main(); }
private void trackBar7_Scroll(object sender, EventArgs e) { matrix[2][1] = (float)trackBar7.Value / 100f; main(); }
private void trackBar8_Scroll(object sender, EventArgs e) { matrix[3][1] = (float)trackBar8.Value / 100f; main(); }
private void trackBar9_Scroll(object sender, EventArgs e) { matrix[0][2] = (float)trackBar9.Value / 100f; main(); }
private void trackBar10_Scroll(object sender, EventArgs e) { matrix[1][2] = (float)trackBar10.Value / 100f; main(); }
private void trackBar11_Scroll(object sender, EventArgs e) { matrix[2][2] = (float)trackBar11.Value / 100f; main(); }
private void trackBar12_Scroll(object sender, EventArgs e) { matrix[3][2] = (float)trackBar12.Value / 100f; main(); }
private void trackBar13_Scroll(object sender, EventArgs e)
{
matrix[4][0] = (float)trackBar13.Value / 100f;
main();
}
private void trackBar14_Scroll(object sender, EventArgs e)
{
matrix[4][1] = (float)trackBar14.Value / 100f;
main();
}
private void trackBar15_Scroll(object sender, EventArgs e)
{
matrix[4][2] = (float)trackBar15.Value / 100f;
main();
}
private void trackBar16_Scroll(object sender, EventArgs e)
{
matrix[4][3] = (float)trackBar16.Value / 100f;
main();
}
}
}