Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6

Постоянно вылетает ошибка с определением цветов пикселей

01.03.2012, 21:30. Показов 1926. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте.
помогите пожалуйста.
возникла проблема с определением цветов пикселей в visual basic 6.0.

Задача стояла так: есть большой квадрат разбитый на 64 маленьких. так вот надо определить количество квадратов, в которых есть НЕ белый пиксель. Задача, вроде, простая и решается легко сканированием каждого из 64 квадратов покоординатно, определением цвета пикселя и сравнением в if через Picture1.Point(x,y) <>16777215 (белый цвет). Если есть такой цвет , кот не равен 16777215, то счетчик квадратов увеличивается на 1. Но возникла проблема, что в некоторых точках, где белый цвет Picture1.Point(x,y) возвращает -1. соответственно счетчик считает неверно.

Бьюсь уже очень давно, помогите пожалуйста!!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.03.2012, 21:30
Ответы с готовыми решениями:

Постоянно вылетает ошибка
Я тут пытаюсь создать чат. Но у меня при запуске GuestBook.jsp постоянно(ну, каждые 2 секунды) выскакивает ошибка. Почему? Что я не так...

Постоянно вылетает ошибка exploer.exe
я знаю одно решение проблемы просто винду переставить, но сейчас это не вариант!!! мне говорили что можно скинуть с другого компа...

Постоянно вылетает ошибка acrotray.exe в проводнике
Доброго дня! Удалял на днях пакет adobe. Через деинсталятор не получалось, удалил вручную, переносом папок в корзину. Папка с Acrobat не...

15
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
01.03.2012, 21:38
Код в студию!
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6
01.03.2012, 22:06  [ТС]
спасибо большое, что откликнулись !!!
вот код, очень надеюсь на Вашу помощь!!!

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
Private Sub Picture1_Change()
On Error Resume Next
 
Dim i As Integer
    Dim schetchik_razlomov As Integer
    Dim Y_0 As Integer
    Dim X_0 As Integer
    Dim shag_x As Integer
    Dim shag_y As Integer
    Dim X_1 As Long
    Dim Y_1 As Long
    Dim a_1 As Integer
    Dim a_2 As Integer
    
        i = 3                            ' при этом значении i получается 64 квадрата. то есть исходную картинку делим на 64 квадрата и сканируем. (если i=1 то иходную картинку делим на 4 части и т.д.)
        schetchik_razlomov = 0   ' это счетчик квадратов, в которых есть не белый пиксель
        
        a_1 = Me.Picture1.Picture.Width    
        a_2 = Me.Picture1.Picture.Height 
        shag_x = a_1 / (2 ^ i)     
        shag_y = a_2 / (2 ^ i)
        X_1 = (2 ^ i - 1) * a_1 / (2 ^ i)        ' координаты начала последнего квадрата
        Y_1 = (2 ^ i - 1) * a_2 / (2 ^ i)
        
         For Y_0 = 1 To Y_1 Step shag_y              ' сначала мы идем в цикле по квадратам
            For X_0 = 1 To X_1 Step shag_x                         
                
                For Y = Y_0 To Y_0 + shag_y Step 1  ' здесь уже выбрали квадрат и сканируем его
                    For X = X_0 To X_0 + shag_x Step 1
 
                        If Picture1.Point(X, Y) <> 16777215 Then 
                             Debug.Print "!!the colour of the pixel with coordinates X=" & X & ",  Y=" & Y & ":  " & Picture1.Point(X, Y)
                             schetchik_razlomov = schetchik_razlomov + 1 
                             GoTo sleduushiy_kavdrat
                        
                        End If
                     Next 'for x
                Next 'for y
               
               
 
            sleduushiy_kavdrat:
            Next    'for X_0
  
        Next   'for Y_0
        Debug.Print vbNewLine & "i=  " & i & "    !schetchik_razlomov=   " & schetchik_razlomov 
End Sub
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
01.03.2012, 22:56
У меня "-1" возвращает если точка находится за пределами рисунка. Проверь правильно ли ты задаёшь координаты (X,Y)...

Добавлено через 6 минут
Можно для проверки поставить такое условие - если X>ШириныРисунка или Y>ВысотыРисунка то СТОП. (ну естесственно через If...Then) И увидишь где ошибка...
0
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6
01.03.2012, 23:03  [ТС]
у меня на рисунке 2646/2646 выдает следующий результат

!!the colour of the pixel with coordinates X=353, Y=113: 16711422
!!the colour of the pixel with coordinates X=728, Y=1: 16250871
!!the colour of the pixel with coordinates X=1493, Y=1: 15790320
!!the colour of the pixel with coordinates X=453, Y=673: -1
!!the colour of the pixel with coordinates X=663, Y=663: -1
!!the colour of the pixel with coordinates X=1325, Y=663: -1
!!the colour of the pixel with coordinates X=1, Y=1325: -1
!!the colour of the pixel with coordinates X=663, Y=1325: -1
!!the colour of the pixel with coordinates X=1325, Y=1325: -1

i= 2 !schetchik_razlomov= 9
координаты точек попадают в размеры рисунка, а результат все равно -1. и результат не правильный получается. вместо 3 получается 9.

никак не могу понять почему. бьюсь уже уйму времени.
помогите, пожалуйста!!!
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 00:08
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
Private Sub Picture1_Change()
On Error Resume Next
 
Dim i As Integer
Dim schetchik_razlomov As Integer
Dim Y_0 As Integer
Dim X_0 As Integer
Dim shag_x As Integer
Dim shag_y As Integer
Dim X_1 As Long
Dim Y_1 As Long
Dim a_1 As Integer
Dim a_2 As Integer
Me.Picture1.ScaleMode = 3
i = 3 ' при этом значении i получается 64 квадрата. то есть исходную картинку делим на 64 квадрата и сканируем. (если i=1 то иходную картинку делим на 4 части и т.д.)
schetchik_razlomov = 0 ' это счетчик квадратов, в которых есть не белый пиксель
 
a_1 = Me.Picture1.ScaleWidth
a_2 = Me.Picture1.ScaleHeight
shag_x = a_1 / (2 ^ i)
shag_y = a_2 / (2 ^ i)
X_1 = (2 ^ i - 1) * a_1 / (2 ^ i) ' координаты начала последнего квадрата
Y_1 = (2 ^ i - 1) * a_2 / (2 ^ i)
 
For Y_0 = 1 To Y_1 Step shag_y ' сначала мы идем в цикле по квадратам
For X_0 = 1 To X_1 Step shag_x
 
For Y = Y_0 + 1 To Y_0 + shag_y Step 1 ' здесь уже выбрали квадрат и сканируем его
For X = X_0 + 1 To X_0 + shag_x Step 1
 
If Picture1.Point(X, Y) <> 16777215 Then
Debug.Print "!!the colour of the pixel with coordinates X=" & X & ", Y=" & Y & ": " & Picture1.Point(X, Y)
schetchik_razlomov = schetchik_razlomov + 1
GoTo sleduushiy_kavdrat
 
End If
Next 'for x
Next 'for y
 
 
 
sleduushiy_kavdrat:
Next 'for X_0
 
Next 'for Y_0
Debug.Print vbNewLine & "i= " & i & " !schetchik_razlomov= " & schetchik_razlomov
Me.BackColor = vbRed: Beep
End Sub
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
02.03.2012, 00:20
1) Код проги надо заключать в теги (VB) (Сейчас Памирыч поправит...). Если не знаешь ТАКОГО, почитай как меня учили
Как отловить вводимый в IE текст. Ошибки в коде препятствуют загрузке проекта

2) Это у тебя не вся прога ?? Пробовал запустить в своём редакторе - ничего не происходит (выдаёт i= 3 !schetchik_razlomov=0 )

Добавлено через 11 минут
----------------------------------------------------------------------
Вот вроде SoftIce уже разобрался.... Василий, просвети - почему ЕЩЁ может выдавать "-1"
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 00:28
Visual Basic
1
Me.Picture1.ScaleMode = 3
Сканировать надо в пикселях
Visual Basic
1
2
a_1 = Me.Picture1.ScaleWidth
a_2 = Me.Picture1.ScaleHeight
И не весь пикчербокс, а только изображение.

Цитата Сообщение от morgann55 Посмотреть сообщение
"-1" возвращает если точка находится за пределами рисунка
1
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6
02.03.2012, 12:53  [ТС]
я правильно понимаю, что в результате выполнения строчки
Me.Picture1.ScaleMode = 3
размер рисунка должен выводиться в пикселях? или это размер окна?
дело в том,что я в coral создала рисунок 100*100 пикселей. и раньше при определении размеров рисунка через a_1 = Me.Picture1.Picture.Width a_2 = Me.Picture1.Picture.Height получался размер в твипах 2646*2646. после выполнения scale mode=3 размер в пикселях получается 821*245, а должен был быть 100*100.
объясните, пожалуйста, что я не так понимаю или делаю.
Получившийся размер - это размер картинки или всего пикчербокс? если картинки, то почему я загружаю квадрат и получаются разные размеры поширине и высоте????
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 13:20
Цитата Сообщение от ruanya Посмотреть сообщение
почему я загружаю квадрат и получаются разные размеры поширине и высоте
У пикчербокса должно стоять свойство Autosize = true

Добавлено через 10 минут
Цитата Сообщение от ruanya Посмотреть сообщение
в пикселях получается 821*245, а должен был быть 100*100.
Потому что у Вас картинка больше пикчербокса
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 13:36
Вот по вашему коду сделал проект. Картинка 100х100 пикселей.
AutoSize=true
Но обратите внимание что Picture1.Height и Picture1.Width равны не 100, а 104 пикселя.
На изображении я поставил 4 красных точки по углам, и их координаты определяются правильно.
Вложения
Тип файла: rar Новая папка.rar (2.2 Кб, 11 просмотров)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 13:53
Если Вам не нравится ScaleHeight и ScaleWidth, то сделайте у PictureBox BorderStyle=0, тогда можно оставить Picture1.Height и Picture1.Width.
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 14:14
Вот по-твоему сделал. только циклы немного изменил, а то в старом коде я чего-то недопонимал
Вложения
Тип файла: rar Новая папка.rar (3.4 Кб, 8 просмотров)
1
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6
02.03.2012, 14:31  [ТС]
спасибо огроменное!!!!!!!!!!!!
сейчас буду пробовать )))))
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
02.03.2012, 14:33
Цитата Сообщение от ruanya Посмотреть сообщение
сейчас буду пробовать
Убрал 4 "лишние" переменные:
Вложения
Тип файла: rar Новая папка.rar (3.4 Кб, 13 просмотров)
1
0 / 0 / 0
Регистрация: 01.03.2012
Сообщений: 6
18.03.2012, 18:19  [ТС]
Спасибо огромное Вам за помощь!!!!!!!!!!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2012, 18:19
Помогаю со студенческими работами здесь

Постоянно вылетает ошибка при работе с INI файлами в Delphi 7
Не могу работать с INI файлами , постоянно вылетают ошибки , никаких синтаксических ошибок в коде нету. Вот простой пример программы ,...

Сравнение цветов пикселей
Задача: имеется картинка, нужно занести пиксели картинки в массив, далее вывести в picturebox эту же картинку, только с другим цветом,...

Массив пикселей(цветов) из текстуры
Доброго времени суток. Подскажите пожалуйста, как получить массив пикселей с кодами их цветов из текстуры или картинки, желательно на языке...

При запуске ккомпьютера и подключения к интернет через vpn постоянно вылетает ошибка 711
Здравствуйте! У меня стоит windows 7. И возникает такая проблема: при запуске ккомпьютера и потом подключения к интернет через vpn ...

Вылетает приложение с определением местоположения
Здравствуйте! Есть простенькое приложение для определения местоположения. При запуске оно выдает ошибку. Не могу понять в чем дело. Кто...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru