формат BMP

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

формат BMP

Сообщение Naked » 16.08.2006 (Ср) 14:07

помогите загрузить 1, 4, 8 битное изображение, все остальное выводится. Уже голову сломал над этим.
Вложения
Структура BMP.rar
(45.18 Кб) Скачиваний: 50

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

Сообщение tyomitch » 16.08.2006 (Ср) 15:35

Ну раз уж тебя так вставляет отрисовывать битмапу в цикле, то держи...

Код: Выделить всё
        Select Case BIH.biBitCount
            Case 1
                For cy = BIH.biHeight - 1 To 0 Step -1
                    For cx = 0 To BIH.biWidth - 1 Step 8
                        Dim bit As Byte
                        For bit = 0 To 7
                            If cx + bit >= BIH.biWidth Then Exit For
                            With aClrTable((bBMP8(c) \ 2 ^ (7 - bit)) And 1)
                                SetPixel hdc, cx + bit, cy, RGB(.rgbRed, .rgbGreen, .rgbBlue)
                            End With
                        Next
                        c = c + 1
                    Next
                    c = (c + 3) And -4
                Next
               
            Case 4
                For cy = BIH.biHeight - 1 To 0 Step -1
                    For cx = 0 To BIH.biWidth - 1 Step 2
                        With aClrTable(bBMP8(c) \ 16)
                            SetPixel hdc, cx, cy, RGB(.rgbRed, .rgbGreen, .rgbBlue)
                        End With
                        If cx + 1 < BIH.biWidth Then
                            With aClrTable(bBMP8(c) And 15)
                                SetPixel hdc, cx + 1, cy, RGB(.rgbRed, .rgbGreen, .rgbBlue)
                            End With
                        End If
                        c = c + 1
                    Next
                    c = (c + 3) And -4
                Next
               
            Case 8
                For cy = BIH.biHeight - 1 To 0 Step -1
                    For cx = 0 To BIH.biWidth - 1
                        With aClrTable(bBMP8(c))
                            SetPixel hdc, cx, cy, RGB(.rgbRed, .rgbGreen, .rgbBlue)
                        End With
                        c = c + 1
                    Next
                    c = (c + 3) And -4
                Next


"Падибагал, спасибо" (с) :-)
Изображение

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

Сообщение Naked » 17.08.2006 (Чт) 0:56

благодарствую

не вставляет, давай без цикла

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

Сообщение tyomitch » 17.08.2006 (Чт) 16:11

Ну раз не вставляет, тогда держи без цикла.
Код: Выделить всё
        Select Case BIH.biBitCount
            Case 1, 4, 8:
                MoveMemory BI.bmiColors(0), aClrTable(0), 4 * 2 ^ BIH.biBitCount
                DrawBitmap bBMP8(0)


Отгадай сам, как нужно переопределить BITMAPINFO
Изображение


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

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

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

    TopList