Неправильные цвета рисунка C # - PullRequest
4 голосов
/ 07 декабря 2009

У меня есть исходное растровое изображение 1x1, и я пытаюсь взять это изображение и нарисовать его в новом растровом изображении. Исходное растровое изображение все красное, но по какой-то причине новое растровое изображение заканчивается градиентом (см. Изображение). Используя приведенный ниже код, не должно ли новое растровое изображение быть полностью красным? Откуда он получает белый / альфа?

альтернативный текст http://www.binaryfortress.com/Temp/Error.jpg

private void DrawImage()
{
    Bitmap bmpSOURCE = new Bitmap(1, 1, PixelFormat.Format32bppArgb);
    using (Graphics g = Graphics.FromImage(bmpSOURCE))
    {
        g.Clear(Color.Red);
    }

    Bitmap bmpTest = new Bitmap(300, 100, PixelFormat.Format32bppArgb);
    using (Graphics g = Graphics.FromImage(bmpTest))
    {
        g.CompositingMode = CompositingMode.SourceCopy;
        g.CompositingQuality = CompositingQuality.AssumeLinear;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.PageUnit = GraphicsUnit.Pixel;
        g.PixelOffsetMode = PixelOffsetMode.None;
        g.SmoothingMode = SmoothingMode.None;

        Rectangle rectDest = new Rectangle(0, 0, bmpTest.Width, bmpTest.Height);
        Rectangle rectSource = new Rectangle(0, 0, 1, 1);
        g.DrawImage(bmpSOURCE, rectDest, rectSource, GraphicsUnit.Pixel);
    }

    pictureBox1.Image = bmpTest;
}

Ответы [ 2 ]

7 голосов
/ 07 декабря 2009

Это не хороший способ заполнить область цветом. Лучшим подходом было бы определить цвет пикселя в исходном изображении и использовать этот цвет для заполнения цели.

Bitmap source = // get the source

Color color = source.GetPixel(1, 1);

Bitmap target = // get the target    

target.Clear(color);

Тем не менее, проблема, скорее всего, InterpolationMode, поскольку именно это используется при масштабировании изображений. Попробуйте использовать Low вместо HighQualityBicubic.

g.InterpolationMode = InterpolationMode.Low;
0 голосов
/ 11 мая 2010

Я нашел это решение для вашей проблемы:

g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...