116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
1

Вывод 24-битного BMP-изображения

11.05.2012, 14:58. Показов 4195. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал код
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
.286
ASSUME CS:CODE,DS:CODE
CODE segment
ORG 100h
 start:
mov ax,13h
int 10h
 push 0A000h
        pop es
mov di,100*320+100
mov al,00110000b
stosb
mov ah,10h
int 16h
mov di,100*320+101
mov al,00001100b
stosb
mov ah,10h
int 16h
mov di,100*320+102
mov al,00000011b
stosb
mov ah,10h
int 16h
read_size proc
    mov ax,3d00h                    ;3dh- функция для открытия файла 
    lea dx,name_file                ; в dx  начало name_file
    int 21h
    or handle,ax
    mov bx,ax                       ; в bx 16-битный номер файла
    lea dx,buffer                   ; dx  на начало буфер
    mov ah,3Fh                  ;читаем
    mov cx,53                  ;прочитаем 26 байт. Пока нам больше и не надо
    int 21h
    mov ax,word ptr [buffer+2]
    mov _size,ax            ;размер
    mov ax,word ptr [buffer+18]
    mov x,ax                    ; по горизонтали
    mov ax,word ptr [buffer+22]
    mov y,ax                    ;по вертикали
;ret
read_size endp
 
; процедура открытия файла
;думаю тут комментировать нечего
 
 
; процедура чтения файла в буфер
read_x proc                     
    mov bx,handle                           ; в handle 16 битный номер файла
    lea dx,buffer1                          ; dx
    mov ah,3Fh
    mov cx, _size        
    int 21h
  ;      ret
read_x endp
 
 push 0A000h
        pop es
mov di,0
mov si,offset buffer1
;inc si
mov cx,64000
loopsym:
push cx
mov bl,[si]
inc si
mov cl,[si]
inc si
mov bh,[si]
inc si
shr cl,6
shl cl,4
shr bl,6
shl bl,2
shr bh,6
xor al,al
or al,bl
or al,bh
or al,cl
stosb
pop cx
loop loopsym
 
      ;  mov al,00110011b ; число от 0 до 255
    ;    mov di,100*320+100; Х и Y
   ;     stosb; вывел точку заданного цвета в заданные координаты
mov ah,10h
int 16h
int 20h
x dw 0
y dw 0
_size dw 0
handle dw 0
name_file db 'D:\ASM\TestProg\1.bmp',0
buffer db 36h dup (?)
buffer1 db 62000 dup (?)
CODE ends
end start
Который должен выводить из файла, изображение 320*200, одни красные пиксели, а выводится изображение, которое в прикрепленном файле. Почему такое? Помогите.
Миниатюры
Вывод 24-битного BMP-изображения  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2012, 14:58
Ответы с готовыми решениями:

Вывод 24 битного BMP из файла
Подскажите, пожалуйста, как прочитать 24 битный BMP файл и осуществить его вывод в 13h графическом...

Создание монохромного bmp из одной из 24-х плоскостей 24-битного bmp
Здравствуйте. Стоит задача разбить 24-х битное bmp изображение на 24 плоскости с последующей...

Кривой вывод изображения в bmp-файле
всем привет, при записывании информации в bmp-файл столкнулся со следующей...

Вывод bmp-шного изображения (картинки) на экран
Помогите мне пожалуйста!! Нужна простейшая программа, в окне которой выводится картинка, и...

8
Ушел с форума
Автор FAQ
16276 / 7601 / 1064
Регистрация: 11.11.2010
Сообщений: 13,616
12.05.2012, 02:38 2
programmisto, потому что режим 13h 320х200х256 цветов
https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{8}=256 для рисования 1 точки требуется 1 байт=8бит
ты пытаешься, как следует из названия темы вывести на экран 24 битный BMP
https://www.cyberforum.ru/cgi-bin/latex.cgi?{2}^{24}=16777216 цветовых оттенка, для рисования 1 точки требуется уже 3 байта=24 бита, это не режим 13h, здесь нужны VESA режимы, а чтобы программировать VESA нужно читать книжки, а ты этого не делаешь принципиально. Спрашивается, о чем с тобой говорить дальше?
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
12.05.2012, 06:49  [ТС] 3
Mikl___, я читал книгу, что в ячейке 13h режима цвета хранятся так:

O O G G R R B B
7 6 5 4 3 2 1 0

O - прозрачность, G - зеленая компонента, R - красная компонента, B - синяя компонента.Или не так? Только не могу понять, в каком порядке цвета хранятся в BMP. Помоги, пожалуйста?
0
Ушел с форума
Автор FAQ
16276 / 7601 / 1064
Регистрация: 11.11.2010
Сообщений: 13,616
12.05.2012, 09:12 4
programmisto, это не так, в 13h режиме может быть только 256 цветов, содержимое каждого цвета определяется содержимым регистров палитры.
Функции VESA SVGA вызываются как подфункции 4Fh прерывания 10h. Номер функции 4Fh должен находится в регистре AH, номер подфункции (номер функции VESA) должен находится в регистре AL, номер режима в ВХ

Видеорежимы SVGA по стандарту VESA
Номер видеорежима Разрешение Количество цветов
100h 640x400 256
101h 640x480 256
102h 800x600 16
103h 800x600 256
104h 1024x768 16
105h 1024x768 256
106h 1280x1024 16
107h 1280x1024 256
10Dh 320x200 32768
10Eh 320x200 65536
10Fh 320x200 16777216
110h 640x480 32768
111h 640x480 65536
112h 640x480 16777216
113h 800x600 32768
114h 800x600 65536
115h 800x600 16777216
116h 1024x768 32768
117h 1024x768 65536
118h 1024x768 16777216
119h 1280x1024 32768
11Ah 1280x102465536
11Bh 1280x1024 16777216
И научись, в конце концов, пользоваться Гуглом
1
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
12.05.2012, 12:22  [ТС] 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
И научись, в конце концов, пользоваться Гуглом
Да пользуюсь я им. Просто везде говорится, только как устанавливать видеорежим VESA, а как осуществлять запись в видеопамять нету. Может ты знаешь?
0
Mikl___
12.05.2012, 12:25
  #6

Не по теме:

programmisto, конечно знаю, а вот подсказывать не хочу, ищи книжку по VESA...

0
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
12.05.2012, 12:46  [ТС] 7
А где взять. Набирал в гугле и мыле "Книга по VESA". Не находил никакой книги по VESA. Может ты знаешь?
0
Ушел с форума
Автор FAQ
16276 / 7601 / 1064
Регистрация: 11.11.2010
Сообщений: 13,616
12.05.2012, 12:54 8
programmisto, набери "программирование графики VESA" и получишь 10 страниц ссылок, читай до отрыжки
1
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
10.11.2012, 01:42 9
Цитата Сообщение от Mikl___ Посмотреть сообщение
программирование графики VESA
вот нашел что-то дельное...

Добавлено через 31 минуту
также в книге Кулакова "программирование на аппаратном уровне" довольно таки хорошо рассказано про все функции биоса, включая и эти функции VESA BIOS
0
10.11.2012, 01:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2012, 01:42
Помогаю со студенческими работами здесь

Вывод изображения на экран консоли после считывания из bmp файла
(Дополнение к вопросу ) Задача состоит в следующем: есть двумерный штрих-код (PDF417) ,...

Вывод графических примитивов в консольное окно посредством загрузки в консоль bmp изображения
Добрый день! Хочу "написать" код для вывода графических примитивов в консольное окно посредством...

специфика создание 32 - х битного и 64 - х битного приложение
Господа допустим есть программа 32-х битная как из неё сделать 64-х битную . Интересует вообще как...

Вывод 64 битного числа на екран в ASCII формате
Помогите с выводом 64 битного числа на екран в ASCII формате, но нелзя использовать 32-х битные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru