Бинарная загрузка BMP

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

Бинарная загрузка BMP

Сообщение StimorolD3DX » 02.08.2007 (Чт) 14:10

Как бинарно (!) загрузить BMP, тоесть без использования ф-ции LoadPicture, и занести все данные в матрицу?

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 02.08.2007 (Чт) 14:18

Описание BMP формата http://www.jenyay.net/index.php?id=bmp

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

Сообщение tyomitch » 02.08.2007 (Чт) 14:19

Оператором Get, блин.

Знаю, что сейчас Хакер скажет, что это нифига не оператор.

И подпись у тебя неграмотная нифига.
Изображение

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

Сообщение Хакер » 02.08.2007 (Чт) 14:54

Оператором Get, блин.

Знаю, что сейчас Хакер скажет, что это нифига не оператор.


Хех :)

Скажет. И спросит. Каков смысл октотропа в указании номера файла при работе с файлами?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 02.08.2007 (Чт) 14:55

А может у кого примерчик найдется на VB?

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

Сообщение keks-n » 02.08.2007 (Чт) 15:24

Чем LoadPicfture и GetDIBits не угодил?
Изображение

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

Сообщение Хакер » 02.08.2007 (Чт) 15:26

Он увидел в них один недостаток - их написал не он.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Сообщение keks-n » 02.08.2007 (Чт) 15:49

Хакер
Фраза - баян.
Изображение

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

Сообщение Хакер » 02.08.2007 (Чт) 15:50

Фраза не баян, а цитата из одной статьи о Microsoft и .net
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 02.08.2007 (Чт) 15:50

Хакер писал(а):Он увидел в них один недостаток - их написал не он.

Ели бы так и было, то я сделал бы сам и не просил бы пример. :wink:

Просто нехочу тратить время на разработку если може у кого есть готовый пример.

PS.
Фраза - баян.

Таки да! :D

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 02.08.2007 (Чт) 17:03

keks-n писал(а):Чем LoadPicfture и GetDIBits не угодил?


'LoadPicfture' не угодил, а как с помощью GetDIBits загрузить картинку?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.08.2007 (Чт) 17:52

keks-n
Чем LoadPicfture и GetDIBits не угодил?

Тем, например, что в 16-битном режиме экрана мы получим 16-битные данные.
StimorolD3DX
'LoadPicfture' не угодил, а как с помощью GetDIBits загрузить картинку?

GetDIBits - это второй этап после LoadPicfture, а не альтернатива ему.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 02.08.2007 (Чт) 18:38

А куда потом картинка в бинарном виде поступает?

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

Сообщение tyomitch » 02.08.2007 (Чт) 21:02

Хакер писал(а):
Оператором Get, блин.

Знаю, что сейчас Хакер скажет, что это нифига не оператор.


Хех :)

Скажет. И спросит. Каков смысл октотропа в указании номера файла при работе с файлами?


Смысл октоторпа в том, что раньше операторы Input, Print, Get и Put были перегружены. Input и Print работали с консолью, Get и Put -- с графикой.
Изображение

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

Сообщение Хакер » 02.08.2007 (Чт) 21:07

октоторпа

Знаю. Просто клавиши "Т" "Р" "О" расположенны рядом (по сути - это треугольник смежных кнопок), а рядом с ними и "П".

Быстро печатал - ошибка синхронизации пальцев :)

__________

А теперь он (октоторп) не нужен и оставлен тольк из соображений совместимости?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Naked
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 207
Зарегистрирован: 27.10.2004 (Ср) 3:16
Откуда: Дальнегорск столица мира

Сообщение Naked » 03.08.2007 (Пт) 8:54

на
Вложения
Структура BMP.rar
(3.55 Кб) Скачиваний: 81

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 03.08.2007 (Пт) 8:56

Alexanbar писал(а):А куда потом картинка в бинарном виде поступает?

В матрицу.

LoadPicture не подходит, он без формы не работает. Точнее работает но его ф-ция point все время возвращает 0 если пикчербокс сделать невидимым.

Naked
Благодарю

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

Сообщение tyomitch » 03.08.2007 (Пт) 9:18

keks-n писал(а):Чем LoadPicfture и GetDIBits не угодил?
Изображение

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 03.08.2007 (Пт) 9:34

http://bbs.vbstreets.ru/viewtopic.php?t=28046 Вот тут был мой пример, хотя немного для другой задачи
Программисты не глючат - глючат компиляторы...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.08.2007 (Пт) 9:42

StimorolD3DX
Возьми в кирпичах мой 2D движок. Там есть пример загрузки с невидимого PictureBox через LoadPicfture и GetDIBits.

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

Сообщение keks-n » 03.08.2007 (Пт) 12:28

StimorolD3DX
Потому что надо создать совместимый DC(CreateCompaibleDC(GetDC(0))) и на него эту картинку закинуть(SelectObject) После чего подготовить BITMAPINFO как тебе надо и сделать GetDIBits в матрицу. Это получается намного быстрее Point.
Изображение

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 03.08.2007 (Пт) 14:42

Объясните, пожалуйста, назначение выделенных манипуляций. По моим соображениям создается 3-х и 4-х-мерные массивы, но зачем?

Код: Выделить всё

                Case 16         '65 536 colors
                    ReDim bBMPData(0 To 2, hInf.biWidth, hInf.biHeight) ' < ?
                    Get #n, hGen.bfOffBits + 1, bBMPData
   
                Case 24         '16 777 216 colors
                    ReDim bBMPData(0 To 2, hInf.biWidth, hInf.biHeight) ' < ?
                    Get #n, hGen.bfOffBits + 1, bBMPData
   
                Case 32         '4 294 967 296 colors
                    ReDim bBMPData(0 To 3, hInf.biWidth, hInf.biHeight, 1) ' < ?
                    Get #n, hGen.bfOffBits + 1, bBMPData
O, sancta simplicitas!

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

Сообщение keks-n » 03.08.2007 (Пт) 15:41

pronto
Количество цветов в битмапе. Сделано, кстати, неверно, т. к. неучтено выравнивание строк по границе DWORD
Изображение

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Сообщение pronto » 04.08.2007 (Сб) 3:50

Все равно не понятно про количество цветов (их от 65 тыс до 4 млрд.). Имелось ввиду, наверное, количество цветовых каналов ( R G B | A)? Потом происходит другое "безобразие":

Код: Выделить всё
Case 1, 4, 8
   Call MoveMemory(BI.bmiColors(0), hPal(0), 4 * 2 ^ hInf.biBitCount)
   Call DrawBitmap(bBMPData(0))
Case 16
   Call DrawBitmap(bBMPData(0, 0, 0))
Case 24
   Call DrawBitmap(bBMPData(0, 0, 0))
Case 32
    Call DrawBitmap(bBMPData(0, 0, 0, 0))

явного выравнивания по границе DWORD, действительно, не происходит, но, блин, работает ведь?! Это мне и не понятно. Не понятно еще и то, как нарисовать в массив с растром до его отображения на контекст?
так?

bBMPData(345) = 0 ' 345 номер точки, 0 - ее цветовое значение (для 8bpp gray - это: 345-ю точку сделать черной). Без второй координаты очень не удобно ориентироваться. Знаю, можно обращаться к контексту (двумерному), но такой вариант чуть медленнее, чем прямое обращение к памяти...

ЗЫ. Освобожусь ближе к вечеру (через ~10 часов).
O, sancta simplicitas!


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

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

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

    TopList