Анализ изображения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Анализ изображения

Сообщение TiG » 11.07.2010 (Вс) 12:30

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

hobit
Начинающий
Начинающий
 
Сообщения: 13
Зарегистрирован: 01.06.2007 (Пт) 14:34

Re: Анализ изображения

Сообщение hobit » 12.07.2010 (Пн) 2:39

Скриншот:
Код: Выделить всё
    Dim dhWND As Long, ScreenRect As RECT, X As Long
    Dim rWIDTH As Long, rHEIGHT As Long
    Dim SourceDC As Long, DestDC As Long, bHANDLE As Long, Wnd As Long
    Dim dHANDLE As Long, dm As DEVMODE
   
    dhWND = GetDesktopWindow
    If dhWND <> 0 Then
        X = GetWindowRect(dhWND, ScreenRect)

        rWIDTH = ScreenRect.Right - ScreenRect.Left
        rHEIGHT = ScreenRect.Bottom - ScreenRect.Top
        SourceDC = CreateDC("DISPLAY", 0&, 0&, dm)
        DestDC = CreateCompatibleDC(SourceDC)
        bHANDLE = CreateCompatibleBitmap(SourceDC, rWIDTH, rHEIGHT)
        SelectObject DestDC, bHANDLE
        BitBlt DestDC, 0, 0, rWIDTH, rHEIGHT, SourceDC, ScreenRect.Left, ScreenRect.Top, &HCC0020
        Wnd = 0
        OpenClipboard Wnd
        EmptyClipboard
        SetClipboardData 2, bHANDLE
        CloseClipboard
        DeleteDC DestDC
        ReleaseDC dHANDLE, SourceDC

    End If

Получить цвет пиксела можно без скриншота, а просто проанализировав цвета у окна:
Код: Выделить всё
lColour = GetPixel(lWindowhDC, lXPos, lYPos)

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 12.07.2010 (Пн) 16:57

ни один код не удалось прикрутить, ошибки выдает, то типмисмач(пикчер бокс, имэйдж), то не определена переменная GetWindowRect( Может в модулях ещё чего то прописать надо?
Все мои игрушки мама разметало ураганом...

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Анализ изображения

Сообщение FireFenix » 12.07.2010 (Пн) 17:54

Наверное здесь за вас полностью код писать не собираются... Вам дали наводку - вот и гуглите!
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Анализ изображения

Сообщение Roman Koff » 12.07.2010 (Пн) 22:42

Может на водку рано?
Последний раз редактировалось Roman Koff 13.07.2010 (Вт) 18:47, всего редактировалось 1 раз.
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Анализ изображения

Сообщение Diamock » 13.07.2010 (Вт) 4:39

TiG писал(а):ни один код не удалось прикрутить, ошибки выдает, то типмисмач(пикчер бокс, имэйдж), то не определена переменная GetWindowRect( Может в модулях ещё чего то прописать надо?

Конечно надо! Требуется декларация API-функций и объявления типов данных.
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 18:38

немного подругому нашёл, более грамоздко, но мне в принципе и этого хватает
подскажите как преобразовать бмп файл в 16цветный? (как паинт делает)
Все мои игрушки мама разметало ураганом...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Анализ изображения

Сообщение Хакер » 13.07.2010 (Вт) 19:00

Нормально задай вопрос.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 19:07

как преобразовать bmp файл из 16 bit в 4 bit
Все мои игрушки мама разметало ураганом...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Анализ изображения

Сообщение Хакер » 13.07.2010 (Вт) 19:15

Это не нормальный вопрос. Это чудовищно мало-информативный вопрос. Вопрос должен содержать ограничение. Если ограничения нет, есть бесконечное число подходящих ответов.

На вопрос «Назовите числа от 5 до 8» можно дать ответ «5, 6, 7, 8». Здесь два ограничения (верхний предел, нижний предел)
На вопрос «Назовите числа от 5 до 8, кратные трём» можно дать более конкретный ответ «3». Здесь три ограничения (верхний предел, нижний предел, кратность).
На вопрос «Назовите числа» можно дать бесконечное число ответов.

Пожалуйста, задавайте вопросы, которые имеют ограничения, ограничивающие количество подходящих вариантов ответа до разумного уровня.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 19:21

как самым простым способом преобразовать файл bmp 16 в бит в 4 бита
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 19:33

что нужно изменить в этом коде, чтобы скрин экрана сохранялся не 16 bit цветности, а 4 bit?

Код: Выделить всё
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As DEVMODE) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long

Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Public Sub Capture(control_hWnd As Long, fNAME As String, Optional OnlyToClipBoard As Boolean = False)
On Error GoTo ErrorCapture
Dim sp As RECT, x As Long
If fNAME <> "" Then
x = GetWindowRect(control_hWnd, sp)
ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
If OnlyToClipBoard = False Then
SavePicture Clipboard.GetData, fNAME
End If
End If
Exit Sub
ErrorCapture:
MsgBox Err & ":Error in Caputre(). Error Message:" & Err.Description, vbCritical, "Warning"
Exit Sub
End Sub

Private Sub ScrnCap(Lt, Top, Rt, Bot)
On Error GoTo ErrorScrnCap
Dim rWIDTH As Long, rHEIGHT As Long
Dim SourceDC As Long, DestDC As Long, bHANDLE As Long, Wnd As Long
Dim dHANDLE As Long, dm As DEVMODE
rWIDTH = Rt - Lt
rHEIGHT = Bot - Top
SourceDC = CreateDC("DISPLAY", 0&, 0&, dm)
DestDC = CreateCompatibleDC(SourceDC)
bHANDLE = CreateCompatibleBitmap(SourceDC, rWIDTH, rHEIGHT)
SelectObject DestDC, bHANDLE
BitBlt DestDC, 0, 0, rWIDTH, rHEIGHT, SourceDC, Lt, Top, &HCC0020
Wnd = 0
OpenClipboard Wnd
EmptyClipboard
SetClipboardData 2, bHANDLE
CloseClipboard
DeleteDC DestDC
ReleaseDC dHANDLE, SourceDC
Exit Sub
ErrorScrnCap:
MsgBox Err & ":Error in ScrnCap(). Error Message:" & Err.Description, vbCritical, "Warning"
Exit Sub
End Sub

Public Sub CaptureDesktop()
On Error GoTo ErrorCaptureDesktop
Dim dhWND As Long, sp As RECT, x As Long
dhWND = GetDesktopWindow
If dhWND <> 0 Then
x = GetWindowRect(dhWND, sp)
ScrnCap sp.Left, sp.Top, sp.Right, sp.Bottom
End If
Exit Sub
ErrorCaptureDesktop:
MsgBox Err & ":Error in CaptureDesktop. Error Message: " & Err.Description, vbCritical, "Warning"
Exit Sub
End Sub



Private Sub Command1_Click()
On Error Resume Next
Call CaptureDesktop
SavePicture Clipboard.GetData, "C:\1\desktop.bmp"

End Sub
Все мои игрушки мама разметало ураганом...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Анализ изображения

Сообщение Хакер » 13.07.2010 (Вт) 19:40

16 bit цветности

За понятием «16 цветности» скрывается огромное число способов хранить информацию о цвете, из которых много — общепринятых. Аналогично с понятием «4 bit цветности».

Перемножаем количество вариантов там и там.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 19:46

хммм, ну я знаю только одно понятие, пожалуй это и будет ограничением:
1. нажимаем конопку print screen под ОС Windows XP sp3
2. запускаем Paint, и вставляем в него скрин экрана
3. сохраняем файл как с:1.bmp 16 цветов
Вопрос, в vb6 имеет доступ к алгоритму, который используется программой paint? Если нет, то как можно проделать сие?
Все мои игрушки мама разметало ураганом...

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Анализ изображения

Сообщение FireFenix » 13.07.2010 (Вт) 20:15

Могу предложить 2 извращения
1) Юзать Paint/Photoshop/etc через OLE
2) Пишем вручную бинарики в файл: заголовок bitmapv5header и цвета пикселей

Если же нада просто сделать чёрно-белую картинку, то лучше использовать готовую формулу для расчёта оттенков серого из цветной
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 20:48

первый вариант мне больше нравится)
ч/б в паинте обзывается монохромно, а 16 цветов цветные
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 20:57

в LoadPicture нашёл colordepth, это оно и есть, но только Form1.Picture = LoadPicture("C:\1\desktop.bmp", , 4), кто подскажет что не так с синтаксисом или может в чём другая причина (инвалид функция аргумент)
Все мои игрушки мама разметало ураганом...

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 21:05

Function LoadPicture([FileName], [Size], [ColorDepth], [X], [Y]) As IPictureDisp
Member of VB.Global
Loads a graphic into a Form, PictureBox, or Image control.
Все мои игрушки мама разметало ураганом...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Анализ изображения

Сообщение Хакер » 13.07.2010 (Вт) 21:18

TiG.

Твоя тема становится похожей на помойку с бессвязным содержанием. Либо ты придерживаешься правил ведения разговора, задаёшь конструктивные вопросы (а не из рязрядя «ничего не работает, что делать?»), начинаешь предложения с большой буквой, ставишь знаки препинания.

Устное предупреждение за размещение 3 сообщений подряд и неиспользование кнопки «Правка».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TiG
Постоялец
Постоялец
 
Сообщения: 327
Зарегистрирован: 12.05.2003 (Пн) 12:34
Откуда: Ростов-на-Дону

Re: Анализ изображения

Сообщение TiG » 13.07.2010 (Вт) 21:24

ты своим присутствием отпугиваешь людей которые смогли бы ответить на моей волне, сходи в аптеку купи тампакс
Все мои игрушки мама разметало ураганом...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Анализ изображения

Сообщение Хакер » 13.07.2010 (Вт) 21:31

—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 60

    TopList