Страница: 1 | 2 |
Вопрос: Карта битов
Добавлено: 27.01.08 15:17
Автор вопроса: Bonapart | Web-сайт:
Как открыть BMP файл как массив и работать только с масивом цветов.
Ответы
Всего ответов: 20
Номер ответа: 1
Автор ответа:
Администратор
ICQ: 278109632
Вопросов: 42
Ответов: 3949
Web-сайт:
Профиль | | #1
Добавлено: 27.01.08 15:37
Все заголовки BMP-файлов прекрасно описаны в MSDN.
Номер ответа: 2
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #2
Добавлено: 27.01.08 17:34
Заголовки кстати занимают 54 байта, я помню
Номер ответа: 3
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #3
Добавлено: 27.01.08 17:42
MSDN не имею
Ссылки или код рабочий дайте
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 27.01.08 18:53
зато интернет его имеет)
Номер ответа: 5
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #5
Добавлено: 27.01.08 19:31
он виснет
сайты Мелкософта весят по метру и найти не могу ничего для VB6 только для VB.net2008 всё
Номер ответа: 6
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #6
Добавлено: 27.01.08 19:39
ну ладно. в последний раз
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
Private Type BITMAPFILEHEADER '14 bytes
bfType As String * 2 '"magic cookie" - must be "BM"
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors() As Long 'array of RGBQUADs
End Type
Public Function BMPFillInfoStruct(ByVal filename As String) As Boolean
Dim hfile As Long, bfh As BITMAPFILEHEADER
Dim BMi As BITMAPINFO
Dim WritePos As Long
Dim FileDat() As Byte
hfile = FreeFile()
'On Error Resume Next
ReDim FileDat(FileLen(filename) - 54)
Open filename For Binary Access Read As #hfile
Get #hfile, , bfh
Get #hfile, 15, BMi.bmiHeader 'start at the 15th byte
Get #hfile, 55, FileDat
Close #hfile 'Close file
Call SetDIBitsToDevice(Picture1.hdc, 0, 0, BMi.bmiHeader.biWidth, BMi.bmiHeader.biHeight, 0, 0, 0, BMi.bmiHeader.biHeight, FileDat(0), BMi, 0)
Picture1.Refresh
BMPFillInfoStruct = True 'indicate success
End Function
Номер ответа: 7
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #7
Добавлено: 28.01.08 07:24
а пользоватьсо этим то как?
Номер ответа: 8
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #8
Добавлено: 28.01.08 20:09
ну как... в BMPFillInfoStruct передаешь путь к файлу BMP. А функция SetDIBitsToDevice нарисует картинку на Picture1
Номер ответа: 9
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #9
Добавлено: 29.01.08 14:18
мне надо к примеру для всего рисунка краный цвет убрать,увеличить рисунок ровно в два раза(1 пиксель на 4)
Номер ответа: 10
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #10
Добавлено: 29.01.08 14:21
у тебя только один массив FileDat а мне бы хотелось масив с таким описание
dim filedat(width,heigth,3) as byte
последний параметр - интенсивность красного,зелёного,синего,прозрачность хотя можно и без прозрачности
Номер ответа: 11
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #11
Добавлено: 29.01.08 15:56
какой-то странный массив filedat(width,heigth,3) as byte...
------------------------------
BMi.bmiHeader.biWidth - ширина
BMi.bmiHeader.biHeight - высота
В FileDat записана интенсивность красного,зелёного,синего по очереди для каждого пикселя, не помню только как нумерация пикселей идет:
123 либо 987
456 либо 654
789 либо 321
для рисунка 3х3, хотя таких вроде не бывает.
Номер ответа: 12
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #12
Добавлено: 29.01.08 15:58
SetDIBitsToDevice работает только с таким массивом как FileDat. Иначе придется вручную рисовать. я так сичтаю
Номер ответа: 13
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #13
Добавлено: 29.01.08 16:21
В FileDat записана интенсивность красного,зелёного,синего по очереди для каждого пикселя, не помню только как нумерация пикселей идет:
123 либо 987
456 либо 654
789 либо 321
Поконкретней можно?
как привести число там записаное к 3 составляющим и обратно
Номер ответа: 14
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #14
Добавлено: 29.01.08 17:54
да нееет же.
Там так:
Байт№1 - красный для первого пикселя
Байт№2 - зеленый для первого пикселя
Байт№3 - синий для первого пикселя
Байт№4 - красный для второго пикселя
Байт№5 - зеленый для второго пикселя
Байт№6 - синий для второго пикселя
Байт№7 - красный для третьего пикселя
Байт№8 - зеленый для третьего пикселя
Байт№9 - синий для третьего пикселя
я не помню где первый пиксель - в конце или в начале
Номер ответа: 15
Автор ответа:
xuser
Вопросов: 1
Ответов: 20
Профиль | | #15
Добавлено: 30.01.08 07:15
Я думал - на vb6 уже никто не программирует.