Вывод картинки в Pascal

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

У тебя в паскале отключен математический сопроцессор 80287. Включать его в Options-Compiler-Numeric Processor-8087/80287
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):"shr" на "mov" заменить
Этого делать никак нельзя, Хыиуду уже сказал как делать.
&quot писал(а):Если же повторить это же, для файла формата JPG
JPEG - пакованный формат, тогда как я и пасал, надо достать декодер для JPEG для Pascal. С учетом ограниченной памяти в ДОС думаю что модуля такого нет, а если и есть, то он должен использовать EMS или XMS - соответственно работать с ним будет тяжело. ТОЛЬКО непакованные форматы - например BMP. В моей программе данные рисунка загружаются из заголовка. Можно это опустить, если задать собственные значения BMPWidth и BMPHeight.
Разноцветные полоски как раз и есть пакованные данные.
Есть такая утила как PV для ДОСа - так она по-моему может преобразовывать JPEG в BMP, записывая его в файл. Параметры ему надо кидать через коммандную строку.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):У тебя в паскале отключен математический сопроцессор 80287. Включать его в Options-Compiler-Numeric Processor-8087/80287
Хочу немного поправить - математический процессор здесь не причем, 80286 Instructions надо включать, там же, в опйиях компилера
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Ура! Картинка отображается! Спасибо вам огромное!
Но всё равно у меня ещё есть несколько вопросов:
1. Где менять глубину цвета и все остальные параметры рисунка?
2. Рисунок всё равно редко делён чёрными полосками на части, как это исправить?
====================
И ещё мне бы из-за любопытства хотелось вас спросить, - а вы долго уже програмированием занимаитесь? Вы самоучки или занимались с преподавателем?
Ответьте, если не секрет, конечно.
(Под словом ВЫ я подразумеваю somewhere и Хыиуду.)
СПАСИБО!!!
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):1. Где менять глубину цвета и все остальные параметры рисунка?
Если речь идет о параметрах экрана, то здесь SetVideoMode(param) задает номер видеорежима, $12 или 18 - это кажеться 640х400х16М цветов, сейчас не могу найти список с номерами видеорежимов, поэтому лучше по-порядку потыркать и найти на глаз :-)
&quot писал(а):2. Рисунок всё равно редко делён чёрными полосками на части, как это исправить?
Проблема в размере банка, постараюсь исправить...
&quot писал(а):И ещё мне бы из-за любопытства хотелось вас спросить, - а вы долго уже програмированием занимаитесь? Вы самоучки или занимались с преподавателем?
13 лет, с января 1993 года, начинал с программирования в машинном коде на ZX Spectrum 48K. Самоучка. :-)
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Неправильное определение перехода между банками видеопамяти - исправлено.
Вот новый код:

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

Procedure VESA_PutScanLine(x,y,len,dataofs:Word);
label l1, l2, l3;
begin
asm
mov ax, y
mul Bytes_per_line
mov bx, ax
mov di, dx
mov ax, x
mov cl, Bytes_per_pixel
mov ch, 0
mul cx
add ax, bx
adc dx, di
push ax
cmp dx,curbank
jz l1
mov curbank,dx
mov ax,4f05h
xor bx,bx
int 10h
l1:
mov ax, len
mov cl, Bytes_per_pixel
mov ch, 0
mul cx
mov cx, ax
pop di
mov ax, VideoSeg
mov es, ax
mov si, dataofs
l2:
mov al, [si]
mov es:[di],al
inc si
add di, 1
jnc l3
inc curbank
mov ax,4f05h
mov dx,curbank
xor bx,bx
int 10h
l3:
loop l2
end;end;
+ еще вариант:

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

l2:
movsb
or di, di
jnz l3
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

У меня стаж на Паскале, если вдуматься - уже 10 лет, самому аж страшно. Правда, то, что мне упорно вдалбливали в школе четыре года, я потом прочел в учебнике за час. До тех пор как зашоренный был, сложнее массивов ничего не знал, о модулях вообще понятия не имел.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Ого, как долго! Я меньше чем пол года, - только начал. Очень интересно! Вы оба очень умные уже! Somwere, большое спасибо, что уделял мне время на создание этой программы, всё теперь отлично работает! Ты очень-очень умный. Я ни одного значения слова непойму в той программе, что ты писал. Как ты всё это запомнил?
Ты мне очень помог!
Хыиуду, - тоже мне очень помог когда-то, но там вопрос был попроще. Я просил написать программу-конвертер из .jpg в .bmp, чтобы открывала JPG, а создавала BMP. Ты мне тогда ответил:
repeat
blockread(f,b,1);
blockwrite(f2,b,1);
until eof(f);
где b - переменная типа byte.
======================
Тоже мне очень помог, спасибо вам обоим!
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Колядин Максим писал(а): Я ни одного значения слова непойму в той программе, что ты писал. Как ты всё это запомнил?
Хм, логично, учитывая, что единственная паскаль-команда в этой программе - asm, обозначает начало ассемблерной вставки. Вся остальная программа написана на чистом ассемблере. Так что не вешай нос, я тоже в этой программе ни слова ни понимаю
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Молодцы, что разделили мне тему. Просто я забыл позаботиться об этом.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Ответить