РАБОТА С КАРТИНКОЙ

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

РАБОТА С КАРТИНКОЙ

Сообщение el-niko » 17.09.2004 (Пт) 20:24

У меня есть двухцветная картинка к примеру размером 2 на 2 пикселей. Как сделать, чтобы прога циклом "смотрела" какого цвета точка в в определённом месте изобрпжения и последовательно записывала в переменную следующее: если точка была чёрной прога пишет 1, если белой - пишет 0. Таким образом, если картинка была 2х2 и вехняя левая и нижняя правая точки были чёрными, а остальные 2 - белыми, то прога должна записать в переменную следующее: "1001".

Подскажите пожалуйста ещё как программно перевести данное значение (1001) в 16-ричный код.

Заранне благодарен, спасибо за уделённое мне время

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 20:37

Код: Выделить всё
Private Sub Command1_Click()
Dim res As String
With Picture1
.ScaleMode = vbPixels
.AutoRedraw = True
.AutoSize = True
    For y = 0 To .ScaleHeight - 1
        For x = 0 To .ScaleWidth - 1
            tmpcolor = .Point(x, y)
            If tmpcolor = vbBlack Then res = res & "1" Else res = res & "0"
        Next
    Next
End With
MsgBox res
End Sub

Вместо ".ScaleHeight - 1", ".ScaleWidth - 1" можешь набирать "1"
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 17.09.2004 (Пт) 20:50

А как эту тему перевести в 16-ричный код ?
=)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 21:02

Код: Выделить всё
For i = 1 To Len(res)
    tmpDec = tmpDec + Val(Mid(res, i, 1)) * 2 ^ (i - 1)
Next
HEXRres = Hex(tmpDec)
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 17.09.2004 (Пт) 21:10

Что-то не прокатило, ошибка номер 6 на последней строке !
=)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 21:13

А что за ошибка, я их пока не помню по номерам!
У меня все работает
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 17.09.2004 (Пт) 21:25

Пожалуйста, напиши мне весь код - объедини и 1 и второй, чтобы переменная res аерекодировалась срезу в 16 код и записывалась в текс. поле, допустим, с имемен KOD
=)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 21:36

Имя текстбокса - txtCOD
Имя пикчуреса - Picture1
Код: Выделить всё
Private Sub Command1_Click()
Dim res As String
With Picture1
.ScaleMode = vbPixels
.AutoRedraw = True
.AutoSize = True
    For y = 0 To .ScaleHeight - 1
        For x = 0 To .ScaleWidth - 1
            tmpColor = .Point(x, y)
            If tmpColor = vbBlack Then res = res & "1" Else res = res & "0"
        Next
    Next
End With

For i = 1 To Len(res)
    tmpDec = tmpDec + Val(Mid(res, i, 1)) * 2 ^ (i - 1)
Next
HEXRres = Hex(tmpDec)
txtCOD.Text = HEXRres
End Sub


Кстати, а картинка, как я понял далеко не 2х2 :?:
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 17.09.2004 (Пт) 21:49

HEXRres = Hex(tmpDec)

в этой строчке выскакивает ошибка "Runtime Error '6' : Overfolow" и всё,чё за косяк хоть ?

=)
=)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.09.2004 (Пт) 21:55

OverFlow - переполнение

А tmpDec перед ошибкой - сколько?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 17.09.2004 (Пт) 22:08

Давай выходи на связь по ICQ =)
=)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.09.2004 (Пт) 22:35

Кхм-кхм
Если картинка и вправду двухцветная, то вместо двойного цикла от SHURUP-а можно просто вызвать GetBitmapBits в Long-переменную.
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 17.09.2004 (Пт) 23:28

Дык же сканлайны выровнены на DWORD, и поэтому так получиться не должно? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.09.2004 (Пт) 23:35

У монохромных - на WORD
Два ряда как раз поместятся в Long.
Изображение


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList