Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите пгожалуйста с растром?

Автор: Zetrok 15.12.2007 3:32

Мне тут надо из файла, ваывести небольшое растровое изображение на экран(без подкачки)ж
Довольно прилично подумав я получил такую прогу

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 15.12.2007 4:57

Цитата(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 15.12.2007 5:00

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

Автор: Lapp 15.12.2007 8:30

Цитата(andriano @ 15.12.2007 1:00) *

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

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

Автор: andriano 15.12.2007 14:56

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

Автор: Client 15.12.2007 15:11

Цитата
что InitGraph имеет другое количество параметров.
А сколько надо параметров тогда?

Автор: andriano 15.12.2007 15:33

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

Автор: Ozzя 15.12.2007 15:56

andriano

Цитата
я ТОЧНО знаю, что у меня эта программа не скомпилируется просто потому, что InitGraph имеет другое количество параметров.

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

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

Какого? В FPC тоже 3 параметра. В VP вообще нет Graph'а. ТМТ Pascal не поддерживает процедуру InitGraph.

Автор: andriano 15.12.2007 17:20

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

Автор: volvo 15.12.2007 17:28

Цитата
Я что, обязан попытаться запустить эту программу?

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

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

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


Автор: andriano 15.12.2007 17:43

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

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

То, что ТР у меня не установлен и, соответственно, проверить исходник на компилируемость я не могу, я уже писал.
Более того, Паскаль остается Паскалем вне зависимости от используемого компилятора. Особенности, конечно, должны обсуждаться в соответствующих разделах, но на то они и особенности. Задачи, насколько я понимаю, к таким особенностям не относятся.
Для задачи, как правило, важен алгоритм, а язык вообще может быть любой: хоть Си, хоть Паскаль, хоть Фортран, хоть Оберон...

Автор: Lapp 15.12.2007 18:30

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

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

Автор: Гость 15.12.2007 21:50

Цитата(andriano @ 15.12.2007 1:00) *

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


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


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


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

Автор: Lapp 16.12.2007 9:06

Цитата(Гость @ 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 стоит в правой части - в нем еще и переменные цикла! Ну и, опять же - думать о бмп, что это просто набор точек - без заголовков, без палитр - это наивно..
Поэтому я просто не понимаю, что тебе посоветовать. Разве что то, что уже советовал. Научиться работать с файлами (не текстовыми) и ознакомиться с форматом бмп (см. ссылку выше). Может, еще разобраться с циклами..
На Форуме были темы про бмп, кажется. Можешь поискать. Но предыдущие советы это не отменяет...
Пиши по мере продвижения.

Автор: Гость 16.12.2007 20:36

Цитата(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 16.12.2007 20:52

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

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

Автор: Гость 16.12.2007 21:52

Цитата(andriano @ 16.12.2007 16:52) *

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


Просто прикол в том что я не наю какими функциями это осуществлять((

Автор: andriano 16.12.2007 22:06

blockread, getmem

Автор: Zetrok 17.12.2007 2:38

Цитата(andriano @ 16.12.2007 18:06) *

blockread, getmem


А мну надо в параметре тока переменную файла указывать..
то есть blockread(f) или как ???

Автор: Michael_Rybak 17.12.2007 2:45

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

Автор: Гость 18.12.2007 0:49

Цитата(Michael_Rybak @ 16.12.2007 22:45) *

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


Я открыл функцию, но там только описание что делает, но нет как использовать(

Автор: Zetrok 20.12.2007 22:49

Я уже почти с БМП разобрался болььшое всем спасибо за помощь.
Но помогите плиз с blockread и getmem плиз киньте, кто нить текст считывания, чтоб я разобрался. а то ясам как то методом тыка делаю не получается или ссылку какую нить книгу с нормальным описанием ГРАФА и таких функций, а то у мну как правило в о всех книгах он вообще не затрагивается

Автор: andriano 21.12.2007 0:04

blockread и getmem не требуют настройки до либо обработки после, поэтому приводить пример использования вроде как нечего:

assign(f,'MyFile.bin');
reset(f,1);
blockread(f,MyVar,sizeof(MyVar));
close(f);

getmem(p,sizeof(p^));

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

Автор: Гость 21.12.2007 0:19

Цитата(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.


Спасибо большое, ща буду разбираться, со вспм этим делом, а то я уж тут прям измудрился с овсем этим