Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
.NET 4.x

Как изменить цвет пикселей во всем изображении?

01.12.2016, 18:57. Показов 5740. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем знатокам доброго времени суток!

Вопрос, собственно, в заголовке.

Условие задачи:
Есть какое-то изображение.
Требуется.
1) пройти по всем пикселям изображения, получить текущие значение цвета каждого пикселя
2) Изменить цвет указанных пикселей

Спасибо за помощь и понимание.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.12.2016, 18:57
Ответы с готовыми решениями:

Как задать цвет всем Label одновременно
Надо задать цвет всем Label одновременно? Например если Label много, то писать код для каждой не вариант. Label1.BackColor =...

Изменить цвет пикселя на изображении
Почему в телефоне приложение завершается (тоесть ошибка) если в загруженном BitMap изображении менять цвет пикселя Bitmap bitmap =...

Изменить цвет конкретного слова во всем тексте richTextBox
Есть richTextBox, в нем есть слова "test" нужно сделать чтоб все слова "test" перекрасились в красный цвет таким кодом красит только...

26
24 / 24 / 16
Регистрация: 14.11.2013
Сообщений: 103
01.12.2016, 22:40
VB.NET
1
2
3
4
5
6
7
8
9
10
Public Function ConvertPixels(ByVal b As Bitmap, ByVal cFrom As Color, ByVal cTo As Color) As Bitmap
  For i As Integer = 0 To b.Width - 1 
    For j As Integer = 0 To b.Height - 1
      If b.GetPixel(i, j) = cFrom Then
        b.SetPixel(i, j, cTo)
      End If
    Next j
  Next i
  Return b
End Function
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 14:23  [ТС]
Наверное я неясно объяснил суть проблемы.
Есть черно-белое изображение, с.м ниже 2-е слева.

Нужно выполнить две операции
1.Все цвета, что слева от красной линии сделать черными, а все цвета, что справа от красной линии - белыми.
2. Все цвета слева от синий линии сдалать черными, а справа - былыми.

Вот мой код
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
  Dim image1 As Bitmap
    Dim nmd, path As String
    Dim pixelColor As Color
    Dim x, y, k, j As Integer
 
    Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
        If nmd = "" Then nmd = "*"
        With OpenFileDialog1
            .InitialDirectory = nmd
            .RestoreDirectory = True
            .FileName = ""
            .Filter = "Image Files|*.jpg;*.bmp;*.png"
            .FilterIndex = 1
            .CheckFileExists = True
            .Title = "Select Open Video Files"
        End With
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            path = OpenFileDialog1.FileName
        End If
     Timer1.Enabled = True
        Timer1.Interval = 200
        Timer1.Start()
    End Sub
 
 Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        Label2.Text = k & "  " & j & "  " & pixelColor.Name
        If k < 100 And j < 100 Then
            pixelColor = image1.GetPixel(k, j)
            Label3.Text = pixelColor.ToArgb
            Dim newColor As Color = Color.FromArgb(25, 47, 0)
            image1.SetPixel(k, j, newColor)
            k = k + 1
            j = j + 1
        End If
    End Sub
Но закрашивание серых цветов не происходит.

Помогите найти ошибку.

Спасибо за науку и понимание.
Изображения
    
0
34 / 20 / 4
Регистрация: 07.03.2015
Сообщений: 334
02.12.2016, 15:32
j+=1 и k +=1 - это же координаты пикселей по диагонали будут, вообще у тебя какой-то не правильный цикл.

Добавлено через 6 минут
Вон же сверху дали правильный цикл используй его.
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 16:15  [ТС]
Цитата Сообщение от Fakels Посмотреть сообщение
Вон же сверху дали правильный цикл используй его.
Да не в цикле дело, вообще ни один пиксель на картинке не меняется даже вручную, без цикла.

Добавлено через 15 минут
Вот код с "правильным" циклом.
И он НЕ меняет цвет пикселей картинки
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
   Dim nmd, path As String
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim b As Bitmap = New Bitmap(path)  '  "D:\test.bmp")
 
        ' Make Image Indexed
 
        Dim nii As New Bitmap(b.Width, b.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb)
        For y As Integer = 0 To nii.Height - 1
            For x = 0 To nii.Width - 1
                Dim cw As New Color
                cw = Color.Black
                If nii.GetPixel(x, y) = cw Then
                    nii.SetPixel(x, y, Color.Red)
                Else
                    nii.SetPixel(x, y, Color.Red)
                End If
 
            Next
        Next
        '   PictureBox1.Image = Image.FromFile(path)  '   "D:\test.bmp")
 
    End Sub
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   If nmd = "" Then nmd = "*"
        With OpenFileDialog1
            .InitialDirectory = nmd
            .RestoreDirectory = True
            .FileName = ""
            .Filter = "Image Files|*.jpg;*.bmp;*.png"
            .FilterIndex = 1
            .CheckFileExists = True
            .Title = "Select Open Video Files"
        End With
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            path = OpenFileDialog1.FileName
        End If
        PictureBox1.Image = Image.FromFile(path)
    End Sub
End Class
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 16:40  [ТС]
Вот код из первого совета
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Class Form1
 
    Dim ds, sa As Integer
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        For sa = 0 To 10
            For ds = 0 To 10
                TextBox1.Text = TextBox1.Text & ds & "- ds" & vbCrLf
 
            Next
            TextBox2.Text = TextBox2.Text & sa & "- sa" & vbCrLf
        Next
    End Sub
 
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        For i As Integer = 0 To 10
            For j As Integer = 0 To 10
                TextBox1.Text = TextBox1.Text & j & "- j" & vbCrLf
 
            Next j
            TextBox2.Text = TextBox2.Text & i & "- i" & vbCrLf
        Next i
    End Sub
End Class
Посмотрите к чему он приводит.....
Миниатюры
Как изменить цвет пикселей во всем изображении?   Как изменить цвет пикселей во всем изображении?  
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 17:41  [ТС]
А вот так вот работает
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Imports System.Drawing.Drawing2D
 
Public Class Form1
 
    Dim nmd, path As String
    Dim x, y As Integer
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim b As Bitmap = New Bitmap(path)  '  "D:\test.bmp")
 
        ' Make Image Indexed
        Dim j, i As Integer
        Dim MyBitmap As Bitmap
        MyBitmap = CType(PictureBox1.Image, Bitmap)
           For i = 0 To MyBitmap.Height - 2
            For j = 0 To MyBitmap.Width - 2
                MyBitmap.SetPixel(i, j, Color.Red)
            Next j
                 Next i
        PictureBox1.Refresh()
        If i = MyBitmap.Width - 1 And j = MyBitmap.Height - 1 Then MsgBox("Finish")
          End Sub
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   If nmd = "" Then nmd = "*"
        With OpenFileDialog1
            .InitialDirectory = nmd
            .RestoreDirectory = True
            .FileName = ""
            .Filter = "Image Files|*.jpg;*.bmp;*.png"
            .FilterIndex = 1
            .CheckFileExists = True
            .Title = "Select Open Video Files"
        End With
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            path = OpenFileDialog1.FileName
        End If
        PictureBox1.Image = Image.FromFile(path)
    End Sub
 
   
End Class
Теперь нужно узнать цвет каждого пикселя и в зависимости темный он или светлый поменять ему цвет на черный или белый.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
02.12.2016, 20:09
Можно так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form4
    Dim bmp As Bitmap
    Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        bmp = New Bitmap(Path.Combine(Application.StartupPath, "tst1.png"))
        PictureBox1.Image = bmp
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim bR As Byte = NumericUpDown1.Value
        Dim bB As Byte = NumericUpDown2.Value
        If bB > bR Then
            PictureBox1.Image = colorMapping(bmp, bR, bB) 'bR-красная граница; bB-синяя граница
        End If
        Button1.Enabled = False
    End Sub
    Public Function colorMapping(ByVal bm As Bitmap, ByVal btR As Byte, ByVal btB As Byte) As Bitmap
        Dim rect As New Rectangle(0, 0, bm.Width, bm.Height)
        Dim bmpData As BitmapData = bm.LockBits(rect, Drawing.Imaging.ImageLockMode.ReadWrite, bm.PixelFormat)
        Dim ptr As IntPtr = bmpData.Scan0
        Dim allbytes As Integer = bmpData.Stride * bm.Height
        Dim rgbV(allbytes - 1) As Byte
        System.Runtime.InteropServices.Marshal.Copy(ptr, rgbV, 0, allbytes)
        Dim bt As Byte
        For i As Integer = 0 To rgbV.Length - 4 Step 4
            bt = rgbV(i)
            If bt < btR OrElse bt > btB Then
                rgbV(i) = 255
                rgbV(i + 1) = 255
                rgbV(i + 2) = 255
                rgbV(i + 3) = 255
            Else
                rgbV(i) = 0
                rgbV(i + 1) = 0
                rgbV(i + 2) = 0
                rgbV(i + 3) = 255
            End If
        Next
        System.Runtime.InteropServices.Marshal.Copy(rgbV, 0, ptr, allbytes)
        bm.UnlockBits(bmpData)
        Return bm
    End Function
End Class
Миниатюры
Как изменить цвет пикселей во всем изображении?   Как изменить цвет пикселей во всем изображении?  
1
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 22:11  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
NumericUpDown1.
NumericUpDown2.Value
А чему это равно? Откуда?

Добавлено через 1 час 10 минут
Цитата Сообщение от Anderis49 Посмотреть сообщение
А чему это равно? Откуда?
А-а-а-а-а, понял!
Но ничего не происходит.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
02.12.2016, 23:17
Возможно, этот вариант вас больше устроит (первый вариант вполне рабочий, основное требование PixelFormat.Format32bppArgb).
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Imports System.IO
Imports System.Drawing.Imaging
Public Class Form5
    Private bmp As Bitmap
    Private n, m As Integer
    Private Sub Form5_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim bmp As New Bitmap(Path.Combine(Application.StartupPath, "tst2.png"))
        n = bmp.Width : m = bmp.Height
        NumericUpDown1.Minimum = 0
        NumericUpDown1.Maximum = n - 1
        NumericUpDown2.Minimum = 0
        NumericUpDown2.Maximum = m - 1
        PictureBox1.Image = bmp
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim bm As Bitmap = New Bitmap(n, m, PixelFormat.Format24bppRgb)
        PictureBox1.Image = bm
        'bR-красная граница; bB-синяя граница; здесь координата X в пиксельных координатах
        Dim bR As Integer = NumericUpDown1.Value
        Dim bB As Integer = NumericUpDown2.Value
        If bB > bR Then
            PictureBox1.Image = colorMapping(bm, bR, bB)
        End If
    End Sub
    Public Function colorMapping(ByVal btmap As Bitmap, ByVal btR As Integer, ByVal btB As Integer) As Bitmap
        Dim bm As Bitmap = btmap
        Dim cc As Color
        For i = 0 To m - 1
            For j = 0 To btR
                cc = Color.White
                bm.SetPixel(j, i, cc)
            Next
        Next
        For i = 0 To m - 1
            For j = btB To n - 1
                cc = Color.White
                bm.SetPixel(j, i, cc)
            Next
        Next
        Return bm
    End Function
End Class
Миниатюры
Как изменить цвет пикселей во всем изображении?   Как изменить цвет пикселей во всем изображении?  
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
02.12.2016, 23:58  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Возможно, этот вариант вас больше устроит
В этом варианте картинка закрашивается в черный при любых значениях
NumericUpDown1.Value и NumericUpDown2.Value
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
03.12.2016, 00:21
Все должно работать (если вы что-то не добавили от себя). Требование: RED д.б. меньше BLUE (в соответствии с вашей схемой) и это видно из кода, который стоило бы посмотреть. Растр сразу закрашивается черным (чтобы снизить время обработки) и далее в циклах выполняется закраска нужных участков белым цветом. Если растр большой, то на это нужно время т.к. метод SetPixel очень не быстрый (в отличие от первого варианта). Можно добавить какой либо признак показывающий, что процесс идет, например, изменить вид курсора.
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
03.12.2016, 10:16  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
выполняется закраска нужных участков белым цветом.
Простите, я вроде внимательно изучал ваш код, но так и не понял, как в коде определяется "нужные" участки ?

Задумка была очень простая - очистить от шума и мусора сканированные ч\б документы - все цвета пикселей поделить на черные и белые. Но сложным оказалось определение какого цвета тот или иной пиксель, т.е. создать алгоритм деления.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
03.12.2016, 15:08
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

Задумка была очень простая - очистить от шума и мусора сканированные ч\б документы - все цвета пикселей поделить на черные и белые.
Вас очень трудно понимать. М.б. это то что нужно.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Imports System.Drawing.Imaging
Imports System.IO
Public Class Form6
    Private src, bmp As Bitmap
    Private Sub Form6_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        bmp = New Bitmap(Path.Combine(Application.StartupPath, "clr1.jpg"))
        PictureBox1.Image = bmp
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        src = bmp.Clone
        toBW(TrackBar1.Value / 100)
        PictureBox2.Image = src
    End Sub
    Private Sub toBW(ByVal th As Single)
        Using gr As Graphics = Graphics.FromImage(src)
            Dim gray_matrix As Single()() = {
              New Single() {0.299F, 0.299F, 0.299F, 0, 0},
              New Single() {0.587F, 0.587F, 0.587F, 0, 0},
              New Single() {0.114F, 0.114F, 0.114F, 0, 0},
              New Single() {0, 0, 0, 1, 0},
              New Single() {0, 0, 0, 0, 1}
            }
            Dim ia As New System.Drawing.Imaging.ImageAttributes
            ia.SetColorMatrix(New System.Drawing.Imaging.ColorMatrix(gray_matrix))
            ia.SetThreshold(th)
            Dim rc As New Rectangle(0, 0, src.Width, src.Height)
            gr.DrawImage(src, rc, 0, 0, src.Width, src.Height, GraphicsUnit.Pixel, ia)
        End Using
    End Sub
End Class
Миниатюры
Как изменить цвет пикселей во всем изображении?   Как изменить цвет пикселей во всем изображении?  
3
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
03.12.2016, 18:21  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
src = bmp.Clone
Ссылка на объект не указывает на экземпляр объекта.
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
03.12.2016, 19:01
Anderis49, скажите, а где размещен рисунок (полное имя) который вы используете?

Добавлено через 18 минут
Для TrackBar1 Minimum/ Maximum установлено 0/100.
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
03.12.2016, 21:51  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
размещен рисунок (полное имя)
Рисунок у меня на диске, сканированный с очень старого документа см. картинку.

Нужно все цвета, что ближе к черному, сделать черными, а те, что ближе к белому - белыми.

Теперь понятна задача?
Изображения
 
0
4708 / 3661 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
03.12.2016, 22:16
Задача то понятна (с третьего раза), но вы меня не хотите понимать. Вы скопировали код, и у вас возникает прерывание на строке src = bmp.Clone. Это значит что bmp=Nothing, ему не присвоено никакой информации. Проще говоря картинка не загрузилась. Запись
VB.NET
1
Path.Combine(Application.StartupPath, "clr1.jpg")
означает, что рисунок берется из папки приложения …\bin\Debug\clr1.jpg (это и есть полное имя файла).
Выложите ваш проект, думаю, что по-другому проблемы не решить.
1
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
04.12.2016, 09:55  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Выложите ваш проект,
Легко....
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
Imports System.Drawing.Drawing2D
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic.Devices
 
Public Class Form1
 
    Dim nmd, path As String
    Dim x, y, ph, pw As Integer
    Dim hp, wp As Integer
    Dim myColor As System.Drawing.Color
    Dim b, image1 As Bitmap
    Dim g As Graphics
 
    '[
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As Integer
    Private Declare Function GetDesktopWindow Lib "user32" () As Integer
    Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Integer) As Integer
    Private Sub GetPoint(ByVal x As Double, ByVal y As Double)
        Dim DC, hwnd, Color As Integer
        hwnd = GetDesktopWindow
        DC = GetWindowDC(hwnd)
        Color = GetPixel(DC, x, y)
        Label1.Text = Color
        Label1.BackColor = ColorTranslator.FromWin32(Color)
    End Sub
    'p
    Private Function Pixel(Hwnd As Integer, x As Integer, y As Integer)
        Return GetPixel(GetWindowDC(Hwnd), x, y)
    End Function
    ']
 
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim b As Bitmap = New Bitmap(path)  '  "D:\test.bmp")
        ListBox1.Items.Clear()
        Dim j, i As Integer
        Dim MyBitmap As Bitmap
        MyBitmap = CType(PictureBox1.Image, Bitmap)
        image1 = New Bitmap(path, True)
        g = Graphics.FromImage(image1)
        For j = 0 To MyBitmap.Height - 2
            For i = 0 To MyBitmap.Width - 2
                Dim gp = MyBitmap.GetPixel(i, j)
                myColor = MyBitmap.GetPixel(i, j)
                Application.DoEvents()
                If myColor.Name = "ffc0c0c0" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff333333" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff484848" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffe7e7e7" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff010101" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffefefef" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffe5e5e5" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "fffefefe" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "fffafafa" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff717171" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "fffbfbfb" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff717171" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffb9b9b9" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffd9d9d9" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffbdbdbd" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffeeeeee" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffc8c8c8" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffa4a4a4" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffcdcdcd" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffcacaca" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "fff3f3f3" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffcacaca" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffdddddd" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffcccccc" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff020202" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff313131" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff030303" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffa4a4a4" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff888888" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff959595" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ff858585" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffc4c4c4" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffc9c9c9" Then MyBitmap.SetPixel(i, j, Color.Black)
                If myColor.Name = "ffe4e4e4" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff8f8f8f" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ffe4e4e4" Then MyBitmap.SetPixel(i, j, Color.White)
                If myColor.Name = "ff6c6c6c" Then MyBitmap.SetPixel(i, j, Color.White)
            Next i
        Next j
        PictureBox1.Refresh()
        If i = MyBitmap.Width - 1 And j = MyBitmap.Height - 1 Then Me.Text = "Finish"
        Timer1.Enabled = True
        Timer1.Interval = 100
        Timer1.Start()
 
    End Sub
 
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
      
    End Sub
 
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        PictureBox1.Image = Image.FromFile(path)
    End Sub
 
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
        If nmd = "" Then nmd = "*"
        With OpenFileDialog1
            .InitialDirectory = nmd
            .RestoreDirectory = True
            .FileName = ""
            .Filter = "Image Files|*.jpg;*.bmp;*.png"
            .FilterIndex = 1
            .CheckFileExists = True
            .Title = "Select Open Video Files"
        End With
        If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
            path = OpenFileDialog1.FileName
        End If
        PictureBox1.Image = Image.FromFile(path)
    End Sub
End Class
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
04.12.2016, 13:51
Цитата Сообщение от Anderis49 Посмотреть сообщение
If myColor.Name = "ffc0c0c0" Then MyBitmap.SetPixel(i, j, Color.White)
If myColor.Name = "ff333333" Then MyBitmap.SetPixel(i, j, Color.Black)
Это можно заменить на что то вроде такого
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim colors As New Dictionary(Of String, Color)() From { _
    {"ffc0c0c0", Color.White}, _
    {"ff333333", Color.Black}, _
    {"ff484848", Color.Black}, _
    {"ffe7e7e7", Color.White} _
}
For Each color__1 As var In colors
    If myColor.Name = color__1.Key Then
        MyBitmap.SetPixel(0, 0, color__1.Value)
    End If
Next
С linq
VB.NET
1
2
3
For Each color As var In colors.Where(Function(color) myColor.Name = color.Key)
    MyBitmap.SetPixel(0, 0, color.Value)
Next
Добавлено через 1 час 42 минуты
Можно обойтись и без цикла, передать Name сразу в словарь
VB.NET
1
MyBitmap.SetPixel(0, 0, color__1[myColor.Name])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2016, 13:51
Помогаю со студенческими работами здесь

Поиск пикселей в изображении
В общем ситуация такая: нужно получить скрин экрана и найти координаты пикселей определённого цвета, к примеру белого. И это должно...

Поиск пикселей в изображении
Реализовал поиск в изображении через Image1-&gt;Canvas-&gt;Pixel Но проблема в том, что такое поиск занимает очень много времени... Есть...

Замена пикселей на изображении
Как заменить цвет каждого пиксселя на изображении на ближайший к нему цвет из следующих : белый, черный, красный, синий, зеленый, желтый,...

Поиск групп пикселей в изображении
Всем привет. Хочу посоветоваться в решении задачи. Есть сканированное изображение. Это изображение представляет собой просто фон с...

Как установить новый цвет пикселей (Bitmap)
Хочу задать новые цвета пикселям изображения и сохранить картинку с новыми цветами, но не знаю как правильно это сделать. Проблема в этой...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru