C #, переопределение OnPaint: альфа-прозрачность с двойным буфером - PullRequest
0 голосов
/ 28 ноября 2009

Я разрабатываю приложение для Windows Mobile 5.0 и выше с .Net Compact Framework 2.0 SP2 с C # .

Я переопределяю метод OnPaint в пользовательском окне сообщений, которое рисует растровое изображение, заполняющее всю форму альфа-прозрачностью, и градиентное поле с кнопкой и сообщением на полупрозрачном фоне.

Я тестирую его, но он такой медленный, поэтому я собираюсь использовать двойной буфер. Я могу использовать двойной буфер для рисования градиента и теста, но если я использую двойной буфер с фоновым растровым изображением с альфа-прозрачностью, он не закрашивает альфа-прозрачность. Так что я делаю только двойной буфер с градиентом, сообщением и кнопкой. Задний прозрачный растровый рисунок нарисован непосредственно на e.Graphics.

Мне интересно, смогу ли я сохранить e.Graphics на растровом изображении, чтобы выполнить всю работу и завершить рисование метода OnPaint на e.Graphics на этом растровом изображении, которое я сохранил раньше.

Это мой код:

protected override void OnPaint(PaintEventArgs e)
{
    Graphics gxOff;
    gxOff = Graphics.FromImage(bmpOffscreen);

    if (!isOuterBackgroundPainted)
    {
        isOuterBackgroundPainted = true;
        DrawingHelper.DrawAlpha(e.Graphics, outerBackground, 180, 0, 0);
        // Here I don't use double buffer because Alpha Blend doesn't work with double buffer.
        //DrawingHelper.DrawAlpha(gxOff, outerBackground, 180, 0, 0);
    }

    // Draw the gradient box
    GradientFill.Fill(gxOff, rectangle, startColor, endColor, FillDirection.TopToBottom);

    gxOff.DrawString(message, font, brush, textLayoutRectangle);

    e.Graphics.DrawImage(bmpOffscreen, 10, 10);
    base.OnPaint(e);
}

bmpOffscreen: битовая карта двойного буфера.

Может быть, я смогу получить мгновенный магазин формы в bmpOffscreen и затем нарисовать полупрозрачный фон поверх него, градиентной рамки и текста.

Обобщение: Я хочу использовать альфа-смесь с двойным буфером .

Любой совет?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2009

Здесь - это способ сделать снимок приложения, работающего в Windows Mobile, без использования строки заголовка и меню.

Это изображение, которое я хотел запуститьдвойная буферизация.

0 голосов
/ 28 ноября 2009

Точно, как это сделать, на самом деле довольно сложно - сложнее, чем простой ответ здесь. Посмотрите на источник для Project Resistance . У нас есть форма с двойной буферизацией, и мы рисуем фон и элементы управления с альфа-каналом прозрачности.

...