Как нарисовать текст со значением прозрачности с помощью C #?

#c# #bitmap

#c# #растровое изображение

Вопрос:

Я создаю файл из с прозрачным цветом фона и хочу нарисовать строку «привет» в окне формы с правильной настройкой прозрачности:

 private void Form1_Paint(object sender, PaintEventArgs e)
{
    Bitmap bmp = new Bitmap(150, 50);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.Transparent);

    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.CompositingQuality = CompositingQuality.GammaCorrected;
    g.CompositingMode = CompositingMode.SourceOver;
    g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

    g.TextContrast = 10;

    Font font = new Font("", 20, FontStyle.Bold);
    Color color = ColorTranslator.FromHtml("#D3D3D3");
    int opacity = 180;
    SolidBrush brush = new SolidBrush(Color.FromArgb(opacity, color));
    g.DrawString("hello", font, brush, 10, 10);
    g.Save();
    g.Dispose();

    bmp.MakeTransparent(Color.Transparent);

    e.Graphics.DrawImage(bmp, 0, 0);
    bmp.Dispose();
}
  

Когда я устанавливаю непрозрачность в 1 или 2, текст изображения исчезает, при значении 3 отображается темно-черным цветом, при значении 254 немного прозрачным. Что-нибудь не так в моем коде?

Комментарии:

1. Не удается воспроизвести «при значении 3 отображается темно-черный цвет» , ни «при значении 254 немного прозрачный» . Прозрачность работает правильно для меня. Можете ли вы показать скриншот?

2. Не могли бы вы, пожалуйста, указать, какой цвет вы указали для TransparencyKey

3. В форме инициализируется компонент: this. TransparencyKey = System. Рисование. Цвет. Черный; это. BackColor = System. Рисование. Цвет. Черный;

4. bmp.MakeTransparent (цветной. Прозрачный); Да? Сделать прозрачный пиксель прозрачным? Не имеет смысла. Обратите внимание, что и MakeTransparent, и TransparencyKey работают только при 100% точном совпадении цветов. — Также: значение гамма-коррекции (TextContrast) должно быть в диапазоне от 0 до 12. Значение по умолчанию равно 4. — Также: D3 ~ ~ довольно ярко-серый. Попробуйте более темный оттенок с меньшей гаммой!

5. Я пытаюсь: g.Очистить (Color. Черный); bmp. Сделать прозрачным (Color. Черный); но ничего не изменилось.

Ответ №1:

Я обновляю код, чтобы:

     private void Form1_Paint(object sender, PaintEventArgs e)
    {
        Bitmap bmp = new Bitmap(200, 200);
        Graphics g = Graphics.FromImage(bmp);
        g.Clear(Color.Black);
       
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.CompositingQuality = CompositingQuality.GammaCorrected;
        g.CompositingMode = CompositingMode.SourceOver;
        g.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

        g.TextContrast = 3;

        Font font = new Font("", 20, FontStyle.Bold);
        Color color = ColorTranslator.FromHtml("#191970");
        int opacity = 20;
        SolidBrush brush = new SolidBrush(Color.FromArgb(opacity, color));

        g.DrawString("hello", font, brush, 20, 20);
        bmp.MakeTransparent(Color.Black);

        g.Save();
        g.Dispose();

        e.Graphics.DrawImage(bmp, 0, 0);
        bmp.Dispose();
    }
  

Вывод на экран:

введите описание изображения здесь

Комментарии:

1. Все еще очень темный текст на экране. 🙁

2. Для TaW: фон полностью прозрачный.

3. Я имел в виду, что рабочий стол etc не просвечивает сквозь текст.

4. Он просвечивает только потому, что Form.Opacity равен < 1. Весь остальной ваш код бессмыслен.

5. Когда я смогу использовать атрибут непрозрачности растровой кисти? Всякий раз, когда вы хотите, за исключением тех случаев, когда вы пытаетесь создать прозрачность в форме, которая поддерживается только для 100% (TransparencyKey) или для всей формы (Непрозрачность). Создаваемое вами растровое изображение обладает всей необходимой прозрачностью и полупрозрачностью, когда вы сохраняете его на диске или накладываете на другое растровое изображение..