Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 40
1

Рисование картинки, прозрачной на n%

16.10.2014, 21:38. Показов 1543. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Возник такой вопрос: как нарисовать картинку таким способом
VB.NET
1
gr.DrawImage(New Bitmap(My.Resources.laserBtn), 0, 0)
только чуть прозрачной относительно заднего picture box ? Я так понимаю нужно сам битмап трансформировать или как ?
Или можно как-то сделать по-другому... Буду благодарен за помощь.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2014, 21:38
Ответы с готовыми решениями:

Рисование (или заливка пиксела) прозрачной заливкой
Доброго всем времени суток! Подскажите пожалуйста как рисовать на picturebox прозрачной заливкой......

Как средствами GDI+ нарисовать тень для прозрачной картинки
Имеется картинка с прозрачным фоном (ico, png).Пусть она вставлена в Picturebox. Как её...

Перерисовка "прозрачной" картинки на фоне
Здравствуйте. Суть задачи такова: нарисовать кнопку меняющуюся при нажатии. Есть 2 картинки(кнопка...

Рисование картинки
Класс TImage, стандартные диалоги для работы с картинками. класс canvas (холст), инструменты...

5
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
16.10.2014, 21:49 2
Не приходит в голову ничего лучше, как перебрать все пиксели и добавить прозрачность к каждому:
VB.NET
1
2
3
4
5
6
Dim bmp As Bitmap
For x = 0 To bmp.Width
    For y = 0 To bmp.Width
        bmp.SetPixel(x, y, Color.FromArgb(150, bmp.GetPixel(x, y)))
    Next
Next
1
2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 40
16.10.2014, 21:53  [ТС] 3
сейчас попробую!
0
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
16.10.2014, 23:02 4
Лучший ответ Сообщение было отмечено ViterAlex как решение

Решение

FOGOK,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        Dim m_Alpha As Single = 0.5
        Dim bm1 As Bitmap = New Bitmap(My.Resources.laserBtn)
        Dim image_attr As New ImageAttributes
        Dim cm As ColorMatrix
 
        Dim bm As New Bitmap(bm1.Width, bm1.Height)
        Dim gr As Graphics = Graphics.FromImage(bm)
        Dim rect As Rectangle = Rectangle.Round(bm1.GetBounds(GraphicsUnit.Pixel))
 
        cm = New ColorMatrix(New Single()() { _
            New Single() {1.0, 0.0, 0.0, 0.0, 0.0}, _
            New Single() {0.0, 1.0, 0.0, 0.0, 0.0}, _
            New Single() {0.0, 0.0, 1.0, 0.0, 0.0}, _
            New Single() {0.0, 0.0, 0.0, 0.0, 0.0}, _
            New Single() {0.0, 0.0, 0.0, m_Alpha, 1.0}})
        image_attr.SetColorMatrix(cm)
        gr.DrawImage(bm1, rect, 0, 0, bm1.Width, bm1.Height, GraphicsUnit.Pixel, image_attr)
 
        PictureBox1.Image = bm
        PictureBox1.Refresh()
Кликните здесь для просмотра всего текста
Так гораздо быстрее, чем перебирать каждый пиксель в циклах.
3
2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 40
16.10.2014, 23:37  [ТС] 5
ViterAlex, Я чуть переделал ваш код:
1.Добавляем PictureBox1, загружаем в него картинку (это будет фон), ставим свойство SizeMode в AutoSize.
2.Копируем PictureBox1, (важно что бы координаты PictureBox2 совпадали с координатами PictureBox1, и PictureBox2 ставим на задний план).
3. Добавляем PictureBox3, загружаем в него картинку, ставим свойство SizeMode в AutoSize.
4. Добавляем кнопку.
Вставляем код:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class Form1
    Dim gb1bm As Bitmap
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        PictureBox1.Parent = PictureBox2  'PictureBox1 - фоновое изображение, PictureBox2 - копия фонового изображения, для того, что бы сделать PictureBox1.BackColor таким же как и фоновое изображение
        PictureBox1.Location = New Point(0, 0)
        PictureBox1.BackColor = Color.Transparent 'делаем так, задний цвет был равен фону
        gb1bm = New Bitmap(PictureBox1.Image)
        Dim pb1bm As New Bitmap(PictureBox3.Image)  'PictureBox1 - изображение, которое хоти сделать прозрачным
        For x = 0 To PictureBox3.Width - 1
            For y = 0 To PictureBox3.Height - 1
                gb1bm.SetPixel(x + PictureBox3.Location.X, y + PictureBox3.Location.Y, Color.FromArgb(150, pb1bm.GetPixel(x, y))) 'цифра 50 (устанавливаем от 0 до 255), это альфа канал (прозрачность), для того что бы установить прозрачность, относительно PictureBox1.BackColor 
            Next
        Next
        PictureBox3.Visible = False
        PictureBox1.Image = gb1bm
    End Sub
End Class
Миниатюры
Рисование картинки, прозрачной на n%  
0
2 / 2 / 1
Регистрация: 23.06.2014
Сообщений: 40
16.10.2014, 23:52  [ТС] 6
Hemicide, у меня ругается.. говорит типы ColorMatrix и ImageAttributes не определены

Добавлено через 4 минуты
исправил.... нужно импортировать
VB.NET
1
Imports System.Drawing.Imaging
0
16.10.2014, 23:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.10.2014, 23:52
Помогаю со студенческими работами здесь

Рисование картинки в QGraphicsScene
Здравствуйте, скажите пожалуйста, как нарисовать картинку QImage в QGraphicsScene по заданным...

Рисование поверх картинки из таймера
Здравствуйте! Только начинала знакомиться с языком C#, поэтому заранее извиняюсь за может быть...

Рисование одной картинки на другой
Есть определенная картинка под названием 1.png, на нее я хочу поместить картинку 2.png(позицию...

Рисование картинки средствами php
картинка отрисовывается через php, всё работает но если я хочу вставить в страницу эту картинку то...

Рисование BMP-картинки по пикселям
Добрый день! получил задание нарисовать BMP-картинку, используя стандартную структуру BMP-файла и...

Рисование картинки в момент инициализации окна
Hallo. Я имею небольшую проблему. Мне нужно прорисовать картинку в QGraphicsView во время...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru