Воспроизведения рисунка |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Воспроизведения рисунка |
plafon |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Кто нибудь поможет с такой задачей
Написать программу для воспроизведения рисунка, записанного в специальном формате в файле с расширением “vec”. Рисунок поместить в центр экрана. Под рисунком вывести имя файла, включая путь. Графическое изображение представляет собой набор графических примитивов: точек, отрезков, прямоугольников и эллипсов различных цветов. Прямоугольники и эллипсы могут иметь заливку. Изображение имеет 16 цветов (коды цветов 0-15). Файл содержит записи, каждая из которых состоит из фиксированного набора полей, описывающих графический примитив. Все координаты указываются в пикселях относительно левого верхнего угла изображения, имеющего координаты (0,0). Оси направлены: 0X - вправо, 0Y - вниз. Графические примитивы отображаются относительно текущей позиции курсора, которая может быть изменена специальной командой |
BlackShadow |
Сообщение
#2
|
Гость |
По-подробнее о записи с фиксированным набором полей, пожалуйста.
|
plafon |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Формат записи:
1. Поле Operation типа Byte. Содержит код операции в соответствии с Табл.1. 2. Поле X типа Integer. Содержит значение координаты по оси X. 3. Поле Y типа Integer. Содержит значение координаты по оси Y. 4. Поле Color типа Byte. Поле содержит цвет графического примитива. Это битовое поле, т.е. в нем имеют значение отдельные биты и группы битов. Обычно биты нумеруются с нуля (младший бит). Бит считается установленным, если содержит 1, и сброшенным (не установленным), если содержит 0. Для выделения нужной группы битов используют битовые маски и операцию логического умножения AND, а также операции логического сдвига вправо (SHR) и влево (SHL). Таблица 1. Содержимое поля Operation. Код операции 0 1 2 3 4 5 6 Вид операции Запись содержит указание размера рисунка в пикселях (в полях X и Y). Если 7 бит поля Color установлен, то рисунок имеет заливку фона, код цвета которого указан в битах 0-3. Указание позиции курсора (X,Y) относительно левого верхнего угла рисунка. Поле Color не несет полезной информации. Рисование пикселя в позиции (X,Y). Цвет пикселя задан в младших 4-х битах (0-3) поля Color. Рисование отрезка из текущей позиции курсора в точку (X,Y). Цвет задан в битах 0-3 поля Color. Позиция курсора изменяется на (X,Y). Рисование прямоугольника, два диагональных угла которого заданы текущей позицией курсора и точкой (X,Y). Цвет задан в битах (0-3) поля Color. Признак заливки - бит 7 установлен в 1. Рисование эллипса с центром в текущей позиции курсора, и радиусами, заданными в полях X и Y. Цвет задан в битах (0-3) поля Color. Признак заливки - бит 7 установлен в 1. Заливка области, ограниченной контуром, начиная с точки (X,Y). Цвет контура задан в битах 0-3, а цвет заливки - в битах 4-7 поля Color. Примечания: 1. Запись с кодом 0 является первой и единственной в файле. 2. Позиция курсора изменяется на (X,Y) только в операциях с кодами 1 и |
BlackShadow |
Сообщение
#4
|
Гость |
Бред-бредом.
Пишу без компилятора и по памяти, так что возможны ошибки.Если что - свисти, исправлю. Код Uses Graph,Crt; Type TRec=Record Code:Byte; x:Integer; y:Integer; Color:Byte End; Procedure DisplayFile(FileName:String); Var f:File Of TRec; r:TRec; Begin Assign(f,FileName); Reset(f); MoveTo(0,0); While Not Eof(f) Do Begin Read(f,r); Case r.Code Of 0: If (r.Color And $80) <> 0 Then Begin SetBackColor(r.Color And $0F); ClearViewPort End 1: MoveTo(r.x,r.y); 2: PutPixel(r.x,r.y,r.Color And $0F); 3: Begin SetColor(r.Color And $0F); LineTo(r.x,r.y) End; 4: If (r.Color And $80) <> 0 Then Begin SetFillStyle(SolidFill,r.Color And %0F); Bar(GetX,GetY,r.x,r.y) End Else Begin SetColor(r.color And $0F); Rectnagle(GetX,GetY,r.x,r.y) End; 5: If (r.Color And $80) <> 0 Then Begin SetFillStyle(SolidFill,r.Color And $0F); FillEllipse(GetX,GetY,r.x,r.y) End Else Begin SetColor(r.Color And $0F); Ellipse(GetX,GetY,r.x,r.y); {Вот тут вроде ещё углы начала и конца указать надо, но я точно не помню} End; 6: Begin SetFillStyle(SolidFill,r.Color Shr 4); FloodFill(x,y,r.Color And $0F) End End; Close(f) End; Var r,m:Integer; s:String; Begin Write('Enter FileName: '); ReadLn(s); r:=Detect; InitGraph(r,m,''); DisplayFile(s); ReadKey; RestoreCRTMode End. Приблизительно так, но я не уверен, что всё верно, т. к. Graph.Tpu не кастовал года уж как 2-3... Если что, то спрашивай, тут на такие вопросы ответят точно. |
plafon |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Пацаны посмотрите а то чё то не получается а завтра зачёт помогите пожалуйста
|
Dark |
Сообщение
#6
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Код Uses Graph,Crt; Type TRec=Record Code:Byte; x:Integer; y:Integer; Color:Byte End; Procedure DisplayFile(FileName:String); Var f:File Of TRec; r:TRec; Begin Assign(f,FileName); Reset(f); MoveTo(0,0); While Not Eof(f) Do Begin Read(f,r); Case r.Code Of 0: If (r.Color And $80) <> 0 Then Begin SetBkColor(r.Color And $0F); ClearViewPort End; 1: MoveTo(r.x,r.y); 2: PutPixel(r.x,r.y,r.Color And $0F); 3: Begin SetColor(r.Color And $0F); LineTo(r.x,r.y) End; 4: If (r.Color And $80) <> 0 Then Begin SetFillStyle(SolidFill,r.Color And $0F); Bar(GetX,GetY,r.x,r.y) End Else Begin SetColor(r.color And $0F); Rectangle(GetX,GetY,r.x,r.y) End; 5: If (r.Color And $80) <> 0 Then Begin SetFillStyle(SolidFill,r.Color And $0F); FillEllipse(GetX,GetY,r.x,r.y) End Else Begin SetColor(r.Color And $0F); Ellipse(GetX,GetY,r.x,r.y,0,360); {Вот тут вроде ещё углы начала и конца указать надо, но я точно не помню} End; 6: Begin SetFillStyle(SolidFill,r.Color Shr 4); FloodFill(r.x,r.y,r.Color And $0F) End End; Close(f) End; end; Var r,m:Integer; s:String; Begin Write('Enter FileName: '); ReadLn(s); r:=Detect; InitGraph(r,m,''); DisplayFile(s); ReadKey; RestoreCRTMode End. -------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
plafon |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Dark зачем же повторять за BlackShadow ведь я же говорю что что то не выходит с этим кодом и ещё прошу всех БЫВАЛЫХ помогите пожалуйста ведь вы же всё знаете
|
Altair |
Сообщение
#8
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
А что конкретно не получается?
Я не стал проверять весь код, просто мельком просмотрел и пробовал компилить. Синтаксических ошибок нет. Вот список причин, по которым может не оаботать программа: 1. вы не правильно делаете файл с расширением vec 2. у вас нет графического драйвера 3. вы не указываете путь к файлу, а только имя 4. у вас старый модуль CRT (error 200) Уточните, что к вас не работает? Цитата Dark зачем же повторять за BlackShadow Я тоже не понял этого. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
plafon |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Всё нормально но после всего пишется File not found
Путь указываю верно |
plafon |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Как прикрепить файл с расширением vec чтобы проверили?
|
plafon |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Извиняюсь там было написано File not open
|
Dark |
Сообщение
#12
|
Знаток Группа: Пользователи Сообщений: 408 Пол: Мужской Репутация: 3 |
Я просто исправил мелкие баги... хм...
-------------------- - Где я?
- Во тьме. - В какой тьме? - Во тьме твоего мозга. |
Altair |
Сообщение
#13
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Извиняюсь там было написано File not open Тогда открой его, и дело с концом. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
plafon |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Непонял как его открыть?
|
BlackShadow |
Сообщение
#15
|
Гость |
Убедись, что не посеял строку Reset(f) После Assign(f,FileName).
|
plafon |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Проверил всё на месте
|
BlackShadow |
Сообщение
#17
|
Гость |
Странно... Перепроверю потом.
|
Altair |
Сообщение
#18
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Действительно странный глюк. Надо попробовать вырезать все из процедуры и вставить в код. Она не нужна все-равно.
И поместить открытие файла перед инициализацией граф режима. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
plafon |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 17 Репутация: 0 |
Пацаны я вас умоляю помогите срочняк нужно а?
|
Altair |
Сообщение
#20
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
ОК, присоедини тестовый файл vec , а то самому не хочется его писать.
Тем более, что он типизированный. -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Текстовая версия | 12.01.2025 5:06 |