Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите пгожалуйста с растром?
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zetrok
Мне тут надо из файла, ваывести небольшое растровое изображение на экран(без подкачки)ж
Довольно прилично подумав я получил такую прогу
program picture;
uses graph;
const
n=20;
m=20;
var
driver, mode, x, y, c: integer;
i,j:integer;
A: array[1..n,1..m] of integer;
procedure schit (var f: file);
begin
Assign(f,'d:\Programs\file.bmp');
reset(f);
For i := 1 to n do
for j := 1 to m do
A[i,j]:= read(f,i,j);
close(f);
end;
end;

begin
driver:=detect;
schit;
InitGraph(driver,mode,'d:\tp\BGI');
If A[i,j]=0 then Putpixel(i,j,0)
else putpixel(i,j,1);
closegraph;
readln;
end.

Но она все равно не работает...
Подскажите плиз что надо подправить и где??? А тоя уже почти с ума сошел, пытаясь отладить её((

М
1. При публикации программ используй теги CODE
2. Если хочешь теоретический ответ, то не приплетай конкретную задачу. Переношу в Задачи
-- Лопарь

Lapp
Цитата(Zetrok @ 14.12.2007 23:32) *

Assign(f,'d:\Programs\file.bmp');
reset(f);
For i := 1 to n do
for j := 1 to m do
A[i,j]:= read(f,i,j);

1. Почитай про файлы (есть тема в FAQ). Тебе нужно с самого начала разобраться с ними. Начни с создания своего файла и чтения. Простейшего, текстового. А потом перейдешь к более сложным..

2. Графический файл формата bmp устроен сложнее, чем ты думаешь. Посмотри здесь хотя бы: http://ru.wikipedia.org/wiki/BMP
andriano
Ты рисуешь только одну точку.
Видишь ли ты ее на экране?
Если нет, то не совпадает ли она по цвету с фоном?
Lapp
Цитата(andriano @ 15.12.2007 1:00) *

Ты рисуешь только одну точку.
Видишь ли ты ее на экране?
Если нет, то не совпадает ли она по цвету с фоном?

andriano, нельзя ли быть немного внимательнее? Неужели не видно, что до рисования точек дело не дойдет, потому что программа просто не скомпилируется?..
Прежде чем стучать по клаве, разберись в вопросе, и не вводи спрашивающего в заблуждение..
andriano
Что значит "внимательнее"? Я что, обязан попытаться запустить эту программу? У меня, кстати, Borland Pascal вообще не установлен, следовательно я ТОЧНО знаю, что у меня эта программа не скомпилируется просто потому, что InitGraph имеет другое количество параметров.
Я вижу в программе странное место, которое. по моему мнению, может содержать ошибку. Я об этом сообщаю. Или я не имею права ничего писать до тех пор, пока не выявлю ВСЕХ ошибок?
Client
Цитата
что InitGraph имеет другое количество параметров.
А сколько надо параметров тогда?
andriano
Зависит от используемого компилятора.
Ozzя
andriano
Цитата
я ТОЧНО знаю, что у меня эта программа не скомпилируется просто потому, что InitGraph имеет другое количество параметров.

Какое другое?
Судя по
Цитата
'd:\tp\BGI'
, используется компилятор Borland/Turbo Pascal, требующий именно три параметра. Как и указано в программе.
...
InitGraph(driver,mode,'d:\tp\BGI');
...

Цитата
Зависит от используемого компилятора.

Какого? В FPC тоже 3 параметра. В VP вообще нет Graph'а. ТМТ Pascal не поддерживает процедуру InitGraph.
andriano
Цитата(Ozzя @ 15.12.2007 11:56) *
В FPC тоже 3 параметра. В VP вообще нет Graph'а. ТМТ Pascal не поддерживает процедуру InitGraph.
Правильно.
Именно ЭТО и называется "Зависит от используемого компилятора".
В частности, от компилятора (точнее, библиотеки) может зависеть НАЗВАНИЕ процедуры, устанавливающей графический режим. Поэтому вместо "не поддерживает процедуру" правильнее было бы написать "процедура называется иначе".
volvo
Цитата
Я что, обязан попытаться запустить эту программу?

mad.gif Ты знаешь, ты в принципе и отвечать-то не обязан. Но если уж взялся - то будь добр ВНИМАТЕЛЬНО посмотреть на название раздела. Это не "32-битные компиляторы", и не "Дельфи". Методом исключений - что у нас осталось?

Цитата
Я вижу в программе странное место, которое. по моему мнению, может содержать ошибку.
Странная особенность зрения, не находишь? ЯВНАЯ ошибка выше по тексту, которая препятствует компиляции программы, тобой замечена не была... Или может, в том компиляторе, которым ты пользуешься, это ТОЖЕ можно делать (я про вызов read как функции без перегрузки)?

Очень удобная привычка, кстати (или опять та же особенность зрения?): тебе показали, что используется TP (см. пост Оззи), но тебе НЕ ВЫГОДНО этого замечать, поэтому ты ОПЯТЬ начинаешь изворачиваться!

andriano
Я не понимаю, при чем здесь "выгода". (если для меня есть выгода, то в чем она будет состоять?)

Вопрос простой: что я должен сделать, если обнаружил ошибку в опубликованном исходнике? Имею ли я право сообщить о ней (вне зависимости от всех других содержащихся в исходнике ошибках), либо ДОЛЖЕН обнаружить ВСЕ ошибки прежде, чем что-либо написать?

То, что ТР у меня не установлен и, соответственно, проверить исходник на компилируемость я не могу, я уже писал.
Более того, Паскаль остается Паскалем вне зависимости от используемого компилятора. Особенности, конечно, должны обсуждаться в соответствующих разделах, но на то они и особенности. Задачи, насколько я понимаю, к таким особенностям не относятся.
Для задачи, как правило, важен алгоритм, а язык вообще может быть любой: хоть Си, хоть Паскаль, хоть Фортран, хоть Оберон...
Lapp
Цитата(andriano @ 15.12.2007 10:56) *
Что значит "внимательнее"? Я что, обязан попытаться запустить эту программу?
"Внимательнее" означает ровно то, что означает это слово, и ни о какой компиляции я не говорил. Если ты берешься помогать, то сначала вникни. И сделай это, пожалуйста, внимательно. Иначе, повторяю, ты можешь ввести человека в заблуждение. Я не верю, что ты (с твоей квалификацией) мог не заметить неправильное использование Read или, скажем, несоответствие параметров при вызове процедуры. Поэтому я и делаю вывод, что ты просто не посмотрел в это место. И именно об этом я и говорю, когда советую тебе быть внимательнее.

Цитата(andriano @ 15.12.2007 13:43) *
Я не понимаю, при чем здесь "выгода".
Выгода - она оч-чень разная бывает.. В данном же случае (согласен с volvo) просто поражает твоя способность не признавать ошибки, переворачивать все с ног на голову (я уже писал об этом) и любой ценой доказывать, что ты был прав (в том и выгода). Эта тема - просто еще один пример твоей демагогии. Ты и сам на нее тратишь время, и других отвлекаешь. Прошу тебя, будь немного терпимее к критике. Мне нравится твой уровень и желание помочь. Я не хочу, чтобы ты уходил. Сбавь свою заносчивость, пожалуйста.
Гость
Цитата(andriano @ 15.12.2007 1:00) *

Ты рисуешь только одну точку.
Видишь ли ты ее на экране?
Если нет, то не совпадает ли она по цвету с фоном?


В том то исуть что ничего я не рисую(( Я ее откомпилировать то толком не могу..


Цитата(Lapp @ 15.12.2007 0:57) *
1. Почитай про файлы (есть тема в FAQ). Тебе нужно с самого начала разобраться с ними. Начни с создания своего файла и чтения. Простейшего, текстового. А потом перейдешь к более сложным..


У мну то в принципе с текстом то все норм...Просто первый раз вообще с БМПешками столкнулся, да и не так долго использую вообще Графический модуль...
А вот с чтением точки я что то уж точно как лубень поступил, просто зря я на ночь сел писать прогу
)))
Lapp
Цитата(Гость @ 15.12.2007 17:50) *

У мну то в принципе с текстом то все норм...
...
А вот с чтением точки я что то уж точно как лубень поступил, просто зря я на ночь сел писать прогу
Не знаю, что ты называешь, нормально - и что ты называешь "текстом"? Файл формата бмп - это никак не текст!
Ты извини, но при взгляде на этот кусочек:
Цитата(Zetrok @ 14.12.2007 23:32) *

               For i  := 1 to n do
for j := 1 to m do
A[i,j]:= read(f,i,j);


- в голову приходят мысли только о человеке, который оооочень слабо знаком с программированием. Мало того, что read стоит в правой части - в нем еще и переменные цикла! Ну и, опять же - думать о бмп, что это просто набор точек - без заголовков, без палитр - это наивно..
Поэтому я просто не понимаю, что тебе посоветовать. Разве что то, что уже советовал. Научиться работать с файлами (не текстовыми) и ознакомиться с форматом бмп (см. ссылку выше). Может, еще разобраться с циклами..
На Форуме были темы про бмп, кажется. Можешь поискать. Но предыдущие советы это не отменяет...
Пиши по мере продвижения.
Гость
Цитата(Lapp @ 16.12.2007 5:06) *

Не знаю, что ты называешь, нормально - и что ты называешь "текстом"? Файл формата бмп - это никак не текст!

То что БМП-не текстовый файл это я знаю..Текстом я называю фал формата .txt
Цитата(Lapp @ 16.12.2007 5:06) *

Мало того, что read стоит в правой части - в нем еще и переменные цикла!

Так вотименно про этоя писал когда говорил что поступил как лубень, Када я это с утра сам почитал то просто о..ел от того что я написал)
Цитата(Lapp @ 16.12.2007 5:06) *

Ну и, опять же - думать о бмп, что это просто набор точек - без заголовков, без палитр - это наивно..

Я знаю что в БМПшнике есть палитра,но вот если рисунок монохромный, то Я так думал не обязательно считывать
Цитата(Lapp @ 16.12.2007 5:06) *

Поэтому я просто не понимаю, что тебе посоветовать. Разве что то, что уже советовал. Научиться работать с файлами (не текстовыми) и ознакомиться с форматом бмп (см. ссылку выше).

Вот мой то вопрос как раз втом как считать?? Мне из БМПешника все что надо.
andriano
Цитата
Вот мой то вопрос как раз втом как считать?? Мне из БМПешника все что надо.

1. Считать заголовок.
2. Разобрать его, выполнить необходимые проверки.
3. Вычислить длину битмапа.
4. Выделить память.
5. Считать битмап.
Гость
Цитата(andriano @ 16.12.2007 16:52) *

1. Считать заголовок.
2. Разобрать его, выполнить необходимые проверки.
3. Вычислить длину битмапа.
4. Выделить память.
5. Считать битмап.


Просто прикол в том что я не наю какими функциями это осуществлять((
andriano
blockread, getmem
Zetrok
Цитата(andriano @ 16.12.2007 18:06) *

blockread, getmem


А мну надо в параметре тока переменную файла указывать..
то есть blockread(f) или как ???
Michael_Rybak
а ты открой справку по двум этим функциям и посмотри, как их использовать.
Гость
Цитата(Michael_Rybak @ 16.12.2007 22:45) *

а ты открой справку по двум этим функциям и посмотри, как их использовать.


Я открыл функцию, но там только описание что делает, но нет как использовать(
Zetrok
Я уже почти с БМП разобрался болььшое всем спасибо за помощь.
Но помогите плиз с blockread и getmem плиз киньте, кто нить текст считывания, чтоб я разобрался. а то ясам как то методом тыка делаю не получается или ссылку какую нить книгу с нормальным описанием ГРАФА и таких функций, а то у мну как правило в о всех книгах он вообще не затрагивается
andriano
blockread и getmem не требуют настройки до либо обработки после, поэтому приводить пример использования вроде как нечего:
assign(f,'MyFile.bin');
reset(f,1);
blockread(f,MyVar,sizeof(MyVar));
close(f);

getmem(p,sizeof(p^));

"мну" - это форма глагола "мять", а не личного местоимения. См. правила п.7.
Гость
Цитата(andriano @ 20.12.2007 20:04) *

blockread и getmem не требуют настройки до либо обработки после, поэтому приводить пример использования вроде как нечего:
assign(f,'MyFile.bin');
reset(f,1);
blockread(f,MyVar,sizeof(MyVar));
close(f);

getmem(p,sizeof(p^));

"мну" - это форма глагола "мять", а не личного местоимения. См. правила п.7.


Спасибо большое, ща буду разбираться, со вспм этим делом, а то я уж тут прям измудрился с овсем этим
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.