0
그림 상자가 있고 이미지 색상을 세피아로 변경하고 싶습니다. 지금까지 그레이 스케일로 설정하는 방법을 알고 있었지만 마지막 부분은 내 몰락입니다. 내가 덕분에 많이그림 상자에서 이미지를 세피아로 변경하기
을 제공 한 의견에서 무엇을해야하는지 제시함으로써 나를 위해 세피아로 설정그림 상자가 있고 이미지 색상을 세피아로 변경하고 싶습니다. 지금까지 그레이 스케일로 설정하는 방법을 알고 있었지만 마지막 부분은 내 몰락입니다. 내가 덕분에 많이그림 상자에서 이미지를 세피아로 변경하기
을 제공 한 의견에서 무엇을해야하는지 제시함으로써 나를 위해 세피아로 설정:
private void button1_Click(object sender, EventArgs e)
{
Bitmap sepiaEffect = (Bitmap)pictureBox.Image.Clone();
for (int yCoordinate = 0; yCoordinate < sepiaEffect.Height; yCoordinate++)
{
for (int xCoordinate = 0; xCoordinate < sepiaEffect.Width; xCoordinate++)
{
Color color = sepiaEffect.GetPixel(xCoordinate, yCoordinate);
double grayColor = ((double)(color.R + color.G + color.B))/3.0d;
Color sepia = Color.FromArgb((byte)grayColor, (byte)(grayColor * 0.95), (byte)(grayColor * 0.82));
sepiaEffect.SetPixel(xCoordinate, yCoordinate, sepia);
}
}
pictureBox.Image = sepiaEffect;
}
이, 그러나 아주 천천히 세트입니다 중첩 된 루프
private void button2_Click(object sender, EventArgs e)
{
float[][] sepiaValues = {
new float[]{.393f, .349f, .272f, 0, 0},
new float[]{.769f, .686f, .534f, 0, 0},
new float[]{.189f, .168f, .131f, 0, 0},
new float[]{0, 0, 0, 1, 0},
new float[]{0, 0, 0, 0, 1}};
System.Drawing.Imaging.ColorMatrix sepiaMatrix = new System.Drawing.Imaging.ColorMatrix(sepiaValues);
System.Drawing.Imaging.ImageAttributes IA = new System.Drawing.Imaging.ImageAttributes();
IA.SetColorMatrix(sepiaMatrix);
Bitmap sepiaEffect = (Bitmap)pictureBox.Image.Clone();
using (Graphics G = Graphics.FromImage(sepiaEffect))
{
G.DrawImage(pictureBox.Image, new Rectangle(0, 0, sepiaEffect.Width, sepiaEffect.Height), 0, 0, sepiaEffect.Width, sepiaEffect.Height, GraphicsUnit.Pixel, IA);
}
pictureBox.Image = sepiaEffect;
}
내가
this에서 세피아 톤 값을 가지고 : 더 빠른 방법은 ColorMatrix을 색상을 변환 한 후 사용하여 ImageAttributes를 통해 그것을 통과하는 새로운 비트 맵으로 이미지를 다시 그리는 방법을 나타내는
ColorMatrix를 만드는 것입니다 조.