Скан BMP

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

Сообщение Q2W » 06.11.2006 (Пн) 19:01

С переворотом наискосок поступаем так:
при чтении файла, когда пишем в двумерный массив, меняем местами координаты x и y - получается переворот картинки "наискосок" обратно. Если конесно переворот был относительно прямой, идущей из верхнего левого угла в нижний правый.
Я знаю верный путь

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

Сообщение X-hacker » 11.11.2006 (Сб) 19:43

tyomitch, LoadPicture не подойдёт, енто и есть СВОЙ LOAD PICTURE

Кстати, выстaвте плиз строения, у кого есть, формата ICO и "Как, ну как работать с SetDiBits"(Желательно пример)
Заранее большое спасибо!

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

Сообщение tyomitch » 11.11.2006 (Сб) 20:36

Так а чем всё-таки не устроила LoadPicture, что надо писать свою?

Формат ico вместе с читалкой: ftp://cs.usu.edu.ru/util/IcoCur/
Изображение

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

Сообщение yaklit » 11.11.2006 (Сб) 21:01

эээээээээ X-hacker, не мог бы ты опубликовать полученный код где у тя картина наискосок получаетсссса:: надо сЫлно....

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сообщение MIT » 14.11.2006 (Вт) 23:38

yaklit
У меня такае же проблема:
написал код, загружающий BMP
Те файлы, у которых первые 4 байта BM6А те читаются с переворотом, а те которые BMVy те как раз и на искосок
Очевидно есть различия в строении файла
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

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

Сообщение X-hacker » 19.11.2006 (Вс) 18:02

tyomitch, пасиб огромный, дошла до меня истина :) :
БМП - шник надо читать с конца в начало, x и y надо местами поменять а загружать с начала в конеTS
Но даже так не всё совсем правильно...
:(
yaklit - А ты чо фильтры для Paint'a пишешь

MIT писал(а):yaklit
У меня такае же проблема:
написал код, загружающий BMP
Те файлы, у которых первые 4 байта BM6А те читаются с переворотом, а те которые BMVy те как раз и на искосок
Очевидно есть различия в строении файла
->->-> BMV есть BMV и вот мысль пришла, не могли ети мелкие единый приличный формать сбабахать?

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

Сообщение tyomitch » 19.11.2006 (Вс) 19:14

У вас у обоих галлюцинации, что ли? :roll:
Третий и четвёртый байт в BMP -- это поле bfSize.
Изображение

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

Сообщение X-hacker » 21.11.2006 (Вт) 18:12

Ну сайз, так сайз.Неважно в каком байте размер лежит, важно различие форматов и их загрузка.
Один грузится нормально, а другой - ненормально - это и есть проблема, вот её надо решать.
Чаще всего я даже знаю, какой Size будет у BMP'шки, ну а тем более,
даже если сайз=1000, но картинка клеточно-линейно-перевёрнутая,
мне от этого не легче!

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

Сообщение alibek » 21.11.2006 (Вт) 18:58

В данном случае проблема в кривых руках.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение tyomitch » 21.11.2006 (Вт) 19:11

X-hacker, формат всегда один и от значения третьего байта, он же младший байт bfSize, никак не зависит.
А alibek прав.
Изображение

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

Сообщение X-hacker » 22.11.2006 (Ср) 19:14

alibek писал(а):В данном случае проблема в кривых руках.

Судя по вышеупомянутому, кто-то знает как всё ето делается правильно и может выставить сорец :?:
Хотя, в принципе простого LoadPicture достаточно, просто хотелось всё знать(Помните вопрос по поводу 3D графики своими руками?Ну вот тоже самое, так что вопрос не стоит особо остро)Ну, если все такие безграмотные и даже профи не знают как BMP-шник "Ручками" загрузить", то конечно легче отмазатся "Кривыми ручками"

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

Сообщение CodeName33 » 23.11.2006 (Чт) 13:49

X-hacker, что-то не заметил в теме, у тебя BMP 24бит или любой может быть вплоть до монохромного?
Программисты не глючат - глючат компиляторы...

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

Сообщение X-hacker » 23.11.2006 (Чт) 16:12

BMP-шник 24-битный
Есть предположение, что можно поступить примерно так:
1.Объявить тип какой-нить(BITMAPINFO например)
2.

dim BMI as BITMAPINFO
Get #f,,Bmi

3.Всё остальное - колор-дата, которую и нужно выводить на экран.
Но млин, как я только не пробовал его загружать, как только не менял иксы с игреками, всё-равно изображение перевёрнутое :(

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

Сообщение CodeName33 » 23.11.2006 (Чт) 16:17

X-hacker, Ну раз 24 бита, то вот этот класс тебе поможет.
Код: Выделить всё
Option Explicit

Private Type BITMAPFILEHEADER
  bfType As Integer
  bfSize As Long
  bfReserved1 As Integer
  bfReserved2 As Integer
  bfOffBits As Long
End Type
Private Type RGBQUAD
    rgbBlue As Byte
    rgbGreen As Byte
    rgbRed As Byte
    rgbReserved As Byte
End Type
Private Type BITMAPINFOHEADER '40 bytes
    biSize As Long
    biWidth As Long
    biHeight As Long
    biPlanes As Integer
    biBitCount As Integer
    biCompression As Long
    biSizeImage As Long
    biXPelsPerMeter As Long
    biYPelsPerMeter As Long
    biClrUsed As Long
    biClrImportant As Long
End Type

Dim Data() As Byte
Dim mWidth As Long
Dim mHeight As Long

Private Function RGBWidth(Width As Long) As Long
RGBWidth = (Width * 3 + 3) And &HFFFFFFFC
End Function

Public Sub LoadFile(ByVal FileName As String)
Dim F As Long, W As Integer, H As Integer, T As Long, B As Byte
Dim BFH As BITMAPFILEHEADER, bih As BITMAPINFOHEADER

F = FreeFile
Open FileName For Binary Access Read As #F
  Get #F, 1, BFH
  Get #F, 1 + Len(BFH), bih
  If Not bih.biBitCount = 24 Then GoTo Erro
 
  mWidth = bih.biWidth
  mHeight = bih.biHeight
 
  W = RGBWidth(bih.biWidth)
  H = bih.biHeight
 
  ReDim Data(1 To W, 1 To H)
  Get #F, 1 + Len(BFH) + Len(bih), Data()
Erro:
Close #F
End Sub

Public Property Get Height() As Long
Height = mHeight
End Property

Public Property Get Width() As Long
Width = mWidth
End Property

Public Property Get Pixel(ByVal x As Long, ByVal y As Long) As Long
On Error GoTo Erro
Dim H As Long, W As Long, T1 As Long, T2 As Long, T3 As Long, T4 As Long

W = UBound(Data, 1)
H = UBound(Data, 2)

T1 = (x - 1) * 3 + 1
T2 = (H - (y - 1))
T3 = T1 + 2
T4 = T1 + 1

If (T3 > W) Or (y > H) Or (x <= 0) Or (y <= 0) Then GoTo Erro

Pixel = RGB(Data(T3, T2), Data(T4, T2), Data(T1, T2))
Exit Property
Erro:
  Pixel = -1
End Property
Программисты не глючат - глючат компиляторы...

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

Сообщение tyomitch » 24.11.2006 (Пт) 12:15

X-hacker писал(а):
alibek писал(а):В данном случае проблема в кривых руках.

Судя по вышеупомянутому, кто-то знает как всё ето делается правильно и может выставить сорец :?:
Хотя, в принципе простого LoadPicture достаточно, просто хотелось всё знать(Помните вопрос по поводу 3D графики своими руками?Ну вот тоже самое, так что вопрос не стоит особо остро)Ну, если все такие безграмотные и даже профи не знают как BMP-шник "Ручками" загрузить", то конечно легче отмазатся "Кривыми ручками"

Между прочим, код загрузки BMP ручками здесь уже кучу раз выкладвался.
Например, на http://bbs.vbstreets.ru/viewtopic.php?t=27557 приведён код загрузки для произвольной глубины цвета.
Но кто же ищет по форуму, когда можно открыть новый топик, и там всех громко крыть за то, что не по первому требованию скинули нужный исходник?
:evil:
Изображение

Q2W
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 745
Зарегистрирован: 31.01.2004 (Сб) 20:46
Откуда: Питер

Сообщение Q2W » 24.11.2006 (Пт) 16:21

Хотел вот я заступиться за автора топика, зная, что поиск очень часто не даёт нужных результатов, хотя соответствующие топики есть.
Сделал несколько поисковых запросов во встроенном поиске.
1-й запрос "Скан BMP" по сабжу топика не дал результатов.
2-й запрос "Сканирование BMP" - тоже.
3-й запрос "формат bmp" (а ведь именно он, как один из вариантов, и нужен был автору) - дал топик, который привёл tyomitch.
4-й запрос "парсинг bmp" дал топик, где выложен код для работы с этим форматом.

Вывод: искать нужно не только саму проблему и все её варианты, но и возможные решения проблемы.
Я знаю верный путь

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

Сообщение X-hacker » 29.12.2006 (Пт) 7:37

Хм...
Запоздало за мной, но всё же спасибо огромное!
Меня тоже вставляет битмапы ручками грузить :)
Код между прочим очень познавательный: начинаем с битмапов, а затем уже смело используем анимированные, с поддержкой прозрачности и пр. пр. пр...
...рисунки (Пока в будущем конечно, дел много такие аппликухи писать)

Пред.

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

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

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

    TopList