#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) или для всей формы (Непрозрачность). Создаваемое вами растровое изображение обладает всей необходимой прозрачностью и полупрозрачностью, когда вы сохраняете его на диске или накладываете на другое растровое изображение..