Скан BMP

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Скан BMP

Сообщение yaklit » 03.11.2006 (Пт) 20:37

Нужно чтоб в BMP файле остались только красные и черные цвета (только 2 цвета), а остальные затерлись красным. Я в работе с графикой не силен, и по этому этого сотворить не могу. В поиске не нашел ничего по сабжу.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.11.2006 (Пт) 20:52

1. C = C And &h0000FF
2. If C <> &h0000FF Then C = &h0

Определись, что тебе надо.
Lasciate ogni speranza, voi ch'entrate.

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 03.11.2006 (Пт) 21:00

Мне нужна ГРАФИЧЕСКАЯ часть приложения. :(

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 03.11.2006 (Пт) 21:06

оффсет 19 - ширина bmp картинки
оффсет 23 - высота bmp картинки

ширина * высота = кол-во пикселей в картинке

оффсет 55 - начало списка пикселей. Каждый пиксель 3 байта. FF FF FF - белый, например. Ну а дальше пользуясь циклом и if, then, else заменяешь

(Красный цвет - 00 FF FF, чёрный - 00 00 00)

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 03.11.2006 (Пт) 21:09

:roll: Мне не подходит это. Обязательно Читать файл ручками?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 03.11.2006 (Пт) 21:52

Хммм, можно ещё глазами :roll:
Если всё делать своими ручками, они скоро отвалятся !

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 03.11.2006 (Пт) 21:56

КАКОЙ СОДЕРЖАТЕЛЬНЫЙ ПОСТ :evil:

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 03.11.2006 (Пт) 21:58

yaklit
Прочитай предыдущие два ответа, и скажи мне, что же тебя не устраивает? Или это из серии "как прочитать файл не открывая его"?
Если всё делать своими ручками, они скоро отвалятся !

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 04.11.2006 (Сб) 10:32

Необязательно читать файл ручками.
Грузишь его в пикчербокс, .Point - узнаёшь цвет нужного пикселя, .Pset - рисуешь точку нужного цвета.
Потом сохраняешь SavePicture

*Не забыть Picture1.Autoredraw = True и Savepicture "", Picture1.Image (а не Picture1.Picture)

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 04.11.2006 (Сб) 10:49

А разве так быстее работать будет? :?

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 04.11.2006 (Сб) 11:05

быстрее чем открыть файл и заменять в нём нужные байты? вряд ли.

..но и тот и другой вариант займёт меньше 5 секунд на любой современной машине. Смысл торопится?

yaklit
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 09.09.2006 (Сб) 19:38

Сообщение yaklit » 04.11.2006 (Сб) 18:15

Спасибо все работает :D
Тему, я думаю, можно закрыть.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.11.2006 (Вс) 0:48

nekeda
Если файл высокого разрешения - наврядли. К тому же Poin и PSet на порядок тормознутее тех же Get/SetPixel. + выход частей картинки за пределы=глюки. Лучше напрямки с битмапом.
Изображение

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 05.11.2006 (Вс) 9:45

keks-n
Человек просил "не читая файл ручками" - я сказал как сделать не читая файл ручками. Существует туева хуча вариантов решения этой задачи (а самый быстрый, кстати, - вообще не использовать ВБ), я лишь предложил тот, о котором спрашивал автор.

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

Сообщение tyomitch » 05.11.2006 (Вс) 10:56

nekeda писал(а):а самый быстрый, кстати, - вообще не использовать ВБ

Сомнительно.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.11.2006 (Вс) 11:33

Если работать с битмапом напрямки, то Get/PutMem выдадут хорошую скорость. Можно вообще по методу GSerg'а спроецировать массив на битмап и работать как с родным.
Изображение

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

Сообщение tyomitch » 05.11.2006 (Вс) 12:33

keks-n писал(а):Можно вообще по методу GSerg'а спроецировать массив на битмап и работать как с родным.

"Метод GSerg-а" проецирования массивов куда попало был описан ещё вот в этой моей мессаге от 22.04.2004 (ровно за месяц до публикации статьи GSerg-а).
Изображение

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

Сообщение GSerg » 05.11.2006 (Вс) 12:46

Только GSerg не читает google groups...
И, даже если бы он их читал, статья датирована 07.04.2004 :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 05.11.2006 (Вс) 13:01

tyomitch
программа перебора байтов, написаная на спп не будет работать быстрее?

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

Сообщение GSerg » 05.11.2006 (Вс) 13:05

Известна масса случаев, когда программы перебора байтов на "спп" работали медленнее VB.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

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

Сообщение tyomitch » 05.11.2006 (Вс) 13:17

GSerg: это не google groups, а fido7.ru.visual.basic!
Ну, и этот форум я в то время тоже не читал :-D
Зато про GetMem и PutMem у меня было ещё раньше (29.08.2002).
А в личке я, кажется, уже писал, что Оловянниковым всё это было придумано ещё задолго до нас.

nekeda: при чём здесь вообще перебор байтов?
Изображение

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 05.11.2006 (Вс) 19:26

я имел ввиду побайтовый скан файла о котором речь шла вначале.

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

Сообщение tyomitch » 05.11.2006 (Вс) 20:17

Для желающих померяться разными местами есть отдельная тема: http://bbs.vbstreets.ru/viewtopic.php?t=26344
Изображение

X-hacker
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 26.08.2006 (Сб) 1:22
Откуда: Moldova

Сообщение X-hacker » 06.11.2006 (Пн) 11:48

Огромное пасибо Kolobuk за объяснение строения бмп-шек, но почему, байты с 55
идут не в последов.-ти RGB а в примерно GRB или BGR, но только не RGB
Ладно фигня, я SetPixelV 'ом вывожу их на форму, картинка грузится "перевёрнутой наискосок(по диагонали)"
У кого нить есть пример правильной загрузки(Желательно с SetDIBits или
чем-то ещё более быстрым, т.к. SetPixelV картинку 1280*1024 грузит аж 10 секунд, а в Виндосовском Paint'e - 1 сек --- нехорошо
Заранее, буду оч. благодарен
А пример можно кстати и в фак, ведь вопрос то для новичков оч насущный

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 06.11.2006 (Пн) 12:25

BGR получается.

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

Сообщение tyomitch » 06.11.2006 (Пн) 12:26

X-hacker писал(а):Огромное пасибо Kolobuk за объяснение строения бмп-шек, но почему, байты с 55
идут не в последов.-ти RGB а в примерно GRB или BGR, но только не RGB
Ладно фигня, я SetPixelV 'ом вывожу их на форму, картинка грузится "перевёрнутой наискосок(по диагонали)"
У кого нить есть пример правильной загрузки(Желательно с SetDIBits или
чем-то ещё более быстрым, т.к. SetPixelV картинку 1280*1024 грузит аж 10 секунд, а в Виндосовском Paint'e - 1 сек --- нехорошо

LoadPicture подойдёт?
Изображение

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 06.11.2006 (Пн) 12:33

X-hacker писал(а):Огромное пасибо Kolobuk за объяснение строения бмп-шек, но почему, байты с 55
идут не в последов.-ти RGB а в примерно GRB или BGR, но только не RGB


ну вот формат такой у BMP-файла.
Весь мир матрица, а мы в нем потоки байтов!

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 06.11.2006 (Пн) 15:14

Это, скорее всего, раньше человеки не определились что брать за оригинал: rgb, bgr, grb и т.п.
Теперь то всё по стандарту - RGB. Кажется даже везде :)

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

Сообщение GSerg » 06.11.2006 (Пн) 15:27

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

Kolobuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 61
Зарегистрирован: 24.10.2006 (Вт) 20:03

Сообщение Kolobuk » 06.11.2006 (Пн) 18:12

Ну извини. :)

След.

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

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

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

    TopList