Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
1

Как отсканировать Picturebox и получить цвета по RGB?

28.08.2018, 20:24. Показов 976. Ответов 11
Метки нет (Все метки)

Помогите пожалуйста. Через API умею, но занимает неприемлимое время.Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2018, 20:24
Ответы с готовыми решениями:

Считать значения цвета по RGB из TextBox и ввести цвет в PictureBox
Как считать значения цвета по RGB из TextBox и ввести цвет в PictureBox

Получить RGB по коду цвета
Здравствуйте. Имеются файлы. Несжатый восьмибитный битмап. Заголовка нет, сразу данные идут,...

Получить компоненту цвета RGB
Имеется структура struct SNOWFLAKE { unsigned N; // кол- во звеньев (уровней) (вид...

Как смешать 4 RGB цвета?
Если нарисовать сетку из чередующихся линий 4-х цветов и посмотреть на нее с некоторого удаления -...

11
1255 / 963 / 134
Регистрация: 01.10.2009
Сообщений: 3,005
Записей в блоге: 1
28.08.2018, 20:48 2
Цитата Сообщение от sm2643066 Посмотреть сообщение
Через API умею, но занимает неприемлимое время
да лад, нативное GetPixel медленнее DNFM-ого? Может просто используете как-то, не очень. Покажите API-шную
1
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
29.08.2018, 17:48  [ТС] 3
На vba сканировал картинку с WEBBROWSER.

Начало такое- затем близкие по значению rgb в диапазоне 10 исключаю и загоняю в LISTBOX.


Visual Basic
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
Private Declare Function SetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long
 
 
 
 
 
 
 
Private Declare Function GetCursorPos _
        Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function dwGetDC Lib "user32" Alias "GetDC" _
    (ByVal hWnd As Long) _
    As Long
Private Declare Function GetPixel _
        Lib "gdi32.dll" ( _
        ByVal hdc As Long, _
        ByVal X As Long, _
        ByVal Y As Long) As Long
 
Private Sub Label1307_Click()
Dim i, K, I1, K1 As Long
Dim T, L, H, W As Long
Dim screenDC, CLR As Long
Dim SCLR, S1 As String
 
 
Dim retval
Dim rgbval
ReDim Preserve Module21.CLR(130000)
 
 
ListBox24.Clear
 
 
T = Val(TextBox291.text)
L = Val(TextBox292.text)
H = Val(TextBox293.text)
W = Val(TextBox294.text)
T = Round(T / 0.752812499999996)
L = Round(L / 0.752812499999996)
H = Round(H / 0.752812499999996)
W = Round(W / 0.752812499999996)
 
For i = L To L + W
For K = T To T + H
'For I = L To W
 
Module21.CLR((i - L + 1) * (K - T) + K - T + 1) = GetPixel(DC, i, K)
 
    rgbval = RGB(200, 200, 200)
    retval = SetPixel(DC, i, K, rgbval)
    
DoEvents
Next K
DoEvents
Next i
 
TextBox297.text = str$(W * H)
End Sub
Добавлено через 2 минуты
В модуле ещу код, кажется. Работает и работает. Цветовые схемы собирать можно. И сохранять в txt.

Добавлено через 6 часов 57 минут
Подскажите-чего не хватает в этом обрывке кода.
import бла бла graphics бла бла.

В пикчербоксе сейчас ничего нет, кроме фона.

VB.NET
1
2
3
4
5
6
7
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim b As New Bitmap(PictureBox1.Image)
        Dim x As Integer = e.X
        Dim y As Integer = e.Y
        Dim c As Color = b.GetPixel(x, y)
        Label1.Text = c.ToString()
    End Sub
0
4008 / 3198 / 772
Регистрация: 02.02.2013
Сообщений: 3,069
Записей в блоге: 2
29.08.2018, 18:33 4
Можно только догадываться о чем речь. Все лишь бла бла graphics бла бла.
1
1414 / 1318 / 302
Регистрация: 03.10.2012
Сообщений: 1,379
29.08.2018, 18:42 5
Цитата Сообщение от sm2643066 Посмотреть сообщение
Подскажите-чего не хватает в этом обрывке кода.
sm2643066, вставь этот код в событие PictureBox1.MouseUp и сам всё поймёшь.

Добавлено через 6 минут
Подсказываю, обрати внимание на переменную "е", как и с каким типом она объявлена.
1
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
29.08.2018, 18:57  [ТС] 6
Не е в том посте. Обрывками код дают. Вот почему не понимают это? Чайник думать может бог знает что.
Может внутри dotnet это все уже. Или вот импорт-до class или после?
0
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
30.08.2018, 11:54  [ТС] 7
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
Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        PictureBox1.Image = Image.FromFile("D:\1.png")
 
    End Sub
 
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim X, Y As Integer
 
        Dim b As New Bitmap(PictureBox1.Image)
   
        Dim c As Color = b.GetPixel(10, 10)
 
        For X = 0 To PictureBox1.Width - 1
            For Y = 0 To PictureBox1.Height - 1
 
                c = b.GetPixel(X, Y)
                ListBox1.Items.Add(c.R)
                ListBox2.Items.Add(c.G)
                ListBox3.Items.Add(c.B)
            Next
        Next
    End Sub
End Class
Позвонил бабушке.
0
1255 / 963 / 134
Регистрация: 01.10.2009
Сообщений: 3,005
Записей в блоге: 1
30.08.2018, 12:20 8
Цитата Сообщение от sm2643066 Посмотреть сообщение
Позвонил бабушке.
Вот к чему это?
0
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
30.08.2018, 13:02  [ТС] 9
Поставьте -1.Хулиганство это.
0
4008 / 3198 / 772
Регистрация: 02.02.2013
Сообщений: 3,069
Записей в блоге: 2
30.08.2018, 14:10 10
Цитата Сообщение от sm2643066 Посмотреть сообщение
Позвонил бабушке.
От бабушки
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
Private A(), R(), G(), B() As Byte
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim bm As Bitmap = Image.FromFile("bm01.png")
    getColors(bm)
    If A Is Nothing Then Exit Sub
    PictureBox1.Image = bm
    ListBoxAddRange(A, ListBox1)
    ListBoxAddRange(R, ListBox2)
    ListBoxAddRange(G, ListBox3)
    ListBoxAddRange(B, ListBox4)
End Sub
Private Sub getColors(ByVal bm As Bitmap)
    Dim w As Integer = bm.Width, h As Integer = bm.Height
    Dim rect As New Rectangle(0, 0, w, h)
    Try
        If bm.PixelFormat <> Imaging.PixelFormat.Format32bppArgb Then
            MsgBox("Имеем: " & bm.PixelFormat.ToString & vbCrLf & "Требуется: PixelFormat.Format32bppArgb")
            Exit Sub
        End If
        Dim k As Integer = w * h - 1
        ReDim A(k) : ReDim R(k) : ReDim G(k) : ReDim B(k)
        Dim bmpData As Imaging.BitmapData = bm.LockBits(rect, Drawing.Imaging.ImageLockMode.ReadWrite, bm.PixelFormat)
        Dim ptr As IntPtr = bmpData.Scan0
        Dim allbytes As Integer = bmpData.Stride * h
        Dim rgbV(allbytes - 1) As Byte
        System.Runtime.InteropServices.Marshal.Copy(ptr, rgbV, 0, allbytes)
        k = 0
        For i As Integer = 0 To rgbV.Length - 2 Step 4
            A(k) = rgbV(i + 3)
            B(k) = rgbV(i)
            G(k) = rgbV(i + 1)
            R(k) = rgbV(i + 2)
            k += 1
        Next
        System.Runtime.InteropServices.Marshal.Copy(rgbV, 0, ptr, allbytes)
        bm.UnlockBits(bmpData)
    Catch ex As Exception
        MsgBox(ex.ToString())
    End Try
End Sub
Private Sub ListBoxAddRange(ByVal cc() As Byte, ByRef lb As ListBox)
    With lb
        .Items.Clear()
        .SuspendLayout()
        .Items.AddRange(cc.Select(Function(x) x.ToString()).ToArray())
        .ResumeLayout()
    End With
End Sub
PS. Получили списки ARGB составляющих и в чем смысл? Теперь вероятно нужно обращаться к дедушке.
Миниатюры
Как отсканировать Picturebox и получить цвета по RGB?  
2
Orlangur
30.08.2018, 14:17
  #11

Не по теме:

Астанавитесь

0
4 / 2 / 2
Регистрация: 24.03.2017
Сообщений: 69
30.08.2018, 16:15  [ТС] 12
Смысл убедиться, что те переменные, которые нужны.
Где мне еще их увидеть. По mousemove можно-да.
Еще-убедился, что в 5 раз быстрее, чем vba.
Доволен короче. А предки-давно в могиле.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2018, 16:15

Как в TChart добавить цвета RGB
Как в TChart добавить цвета RGB? Например: with Series1 do begin Add(R1, 'Раздел...

Как в DBChart добавить цвета RGB?
Как в DBChart добавить цвета RGB? Делаю так: with Series1 do begin Add(R1, 'Раздел...

Как записать RGB цвета в массив?
Здравствуйте, вот собственно код, нашел на форуме, выводит цвета нормально, но хочу записать эти...

Как выделить определенный диапазон цвета RGB на картинке bmp?
всем доброго времени суток!помогите,пожалуйста, в написании кода.есть картинка bmp. Надо разложить...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru