Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
4 / 4 / 6
Регистрация: 08.04.2018
Сообщений: 128

Засунуть несколько картинок в файл, прочитать их и вывести на экран

15.11.2018, 18:13. Показов 791. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. На днях решил создать такую штучку для своей игры: Мне надоело, что пользователь может заменить картинки персоонажей, так как они не скрыты в какой-то файл, как в других играх. Как это можно реализовать на паскале? Например, создать файл с расширением .gamepict, засунуть в него картинки(Программно), а затем получить их при открытии игры и нормально использовать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2018, 18:13
Ответы с готовыми решениями:

Прочитать и вывести на экран файл
Здравствуйте, задали сделать такое: "Есть текстовый файл больше 2х строк (у меня 8 строк), надо прочесть и вывести на экран". Самое...

Открыть txt-файл, прочитать, вывести на экран
Помогите , не получается открыть .txt, прочитать, вывести на экран #include <sysdefs.h>//подключаю класс String библиотеки VCL ...

Прочитать все записи из файла и вывести их на экран и в текстовый файл
найти max sin, min cos, 2ой минимум и максимум и вывести их на экран

7
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
15.11.2018, 18:54
Лучше прикрепите их к .exe через $resource ... (как это делают в большинстве нормальных игры)

Ну а если для чего то ещё надо паковать файлы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
begin
  var otp_str := System.IO.File.Create('otp.file');
  var bw := new System.IO.BinaryWriter(otp_str);
  
  foreach var fname in Arr('in1.file', 'in2.file') do
  begin
    var in_str := System.IO.File.OpenRead(fname);
    bw.Write(in_str.Length);
    bw.Flush;
    in_str.CopyTo(otp_str);
    otp_str.Flush;
    in_str.Close;
  end;
  
  otp_str.Close;
end.
Ну и загрузка потом (что касается битмапов - они вообще с потока загружаться умеет, файл им не нужен):
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
{$reference System.Drawing.dll}
 
begin
  var str := System.IO.File.OpenRead('otp.file');
  var br := new System.IO.BinaryReader;
  var l := br.ReadInt32;
  var bmp1 := new System.Drawing.Bitmap(str);
  str.Position := 4+l;//4 байт это мы прочитали длину первого файла и ещё l сама длинна, то есть устанавливаем файловый указатель на после первого файла
  br.ReadInt32;//нам уже не нужна вторая длина, всё равно второй битмап будет до конца читать
  var bmp2 := new System.Drawing.Bitmap(str);
  str.Close;
end.
0
4 / 4 / 6
Регистрация: 08.04.2018
Сообщений: 128
18.11.2018, 11:15  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
Лучше прикрепите их к .exe через $resource ... (как это делают в большинстве нормальных игры)
Пробовал... Не работает.. Компилирую с $resource картинки, потом .exe перемещаю, например, на рабочий стол, запускаю... Пишет "не найден файл picture.png".

Добавлено через 16 минут
Цитата Сообщение от Sun Serega Посмотреть сообщение
var br := new System.IO.BinaryReader;
Нету конструктора с таким числом параметров.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.11.2018, 13:03
Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
var br := new System.IO.BinaryReader;
Используйте логическое мышление...
Pascal
1
BinaryReader(str);
Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
не найден файл
Наверное, вы пытаетесь его как файл загрузить, а не получить поток с ним из .exe? Надо использовать GetResourceStream...
0
4 / 4 / 6
Регистрация: 08.04.2018
Сообщений: 128
18.11.2018, 13:09  [ТС]
Цитата Сообщение от Sun Serega Посмотреть сообщение
BinaryReader(str);
Пробовал и так до вашего ответа.... Не работает.
Может проблема в 1 программе? Когда я выводил в файл in_str.Length и потом заходил в этот файл, мне выдавало что-то типо такого:
Кликните здесь для просмотра всего текста
й ‰PNG


IHDR @ @ %ж‰ sRGB ®Ой gAMA ±Џьa pHYs Г ГЗoЁd tEXtSoftware paint.net 4.1.1c*њK ZIDAThCнП 1cЩїШc+°s·ЇР
hґZ*ЂV@+*Р
hґZ*ЂV@+*Р
hґZ*ЂV@+*Р
hґZ*ЂV@ы<°=ГїbРkцП IEND®B`‚к ‰PNG


IHDR @ @ %ж‰ sRGB ®Ой gAMA ±Џьa pHYs Г ГЗoЁd tEXtSoftware paint.net 4.1.1c*њK [IDAThCнП 1›}эoҐ1a°;wзk5Ѓљ@M*&PЁ Фj5Ѓљ@M*&PЁ Фj5Ѓљ@M*&PЁ Фj5Ѓљ@M
*&PЁ Ф>м<чKaб®ggђ IEND®B`‚

P.S. Если спойлер не работает, посмотрите через код элемента
А когда выводил в саму программу, то выдавало 233, 234. Как это понимать надо? Картинки нормальные использовал вместо in1.file и in2.file
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.11.2018, 13:15
Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
Пробовал и так до вашего ответа.... Не работает.
Что именно не работает? То что вы не сказали что - значит что выдаёт ту же ошибку, что никак не может быть так.

Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
мне выдавало что-то типо такого
А вы хотите чтоб файл состоящий из байтов 2 картинок читался как текстовый?
0
4 / 4 / 6
Регистрация: 08.04.2018
Сообщений: 128
18.11.2018, 13:16  [ТС]
Думал я, что понял свою ошибку... Я использовал png вместо bmp. Думаю, ну ладно. Сейчас переведу png в bmp и попробую запустить. В итоге пишет "Ошибка времени выполнения: Недопустимый параметр" в строке 7.
Обе программы:
Кликните здесь для просмотра всего текста

1
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
begin
  var otp_str := System.IO.File.Create('models.mdl');
  var bw := new System.IO.BinaryWriter(otp_str);
  
  foreach var fname in Arr('air.bmp', 'grow.bmp') do
  begin
    var in_str := System.IO.File.OpenRead(fname);
    bw.Write(in_str.Length);
    bw.Flush;
    in_str.CopyTo(otp_str);
    otp_str.Flush;
    in_str.Close;
  end;
  
  otp_str.Close;
end.
2.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
{$reference System.Drawing.dll}
 
begin
  var str := System.IO.File.OpenRead('models.mdl');
  var br := new System.IO.BinaryReader(str);
  var l := br.ReadInt32;
  var air := new System.Drawing.Bitmap(str);
  str.Position := 4+l;//4 байт это мы прочитали длину первого файла и ещё l сама длинна, то есть устанавливаем файловый указатель на после первого файла
  br.ReadInt32;//нам уже не нужна вторая длина, всё равно второй битмап будет до конца читать
  var grow := new System.Drawing.Bitmap(str);
  str.Close;
end.
0
 Аватар для Sun Serega
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
18.11.2018, 13:19
Собственно что значит

Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
выводил в файл in_str.Length
?

Добавлено через 49 секунд
Цитата Сообщение от Cyber_User_321 Посмотреть сообщение
Я использовал png вместо bmp
Нет, оно все форматы читать умеет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2018, 13:19
Помогаю со студенческими работами здесь

Прочитать файл и вывести его содержимое на экран
Программа выводит нужный текст из программы. Ну при этом еще выдает ошибку, как ее убрать? .model small org 100h ...

Открыть файл для чтения и прочитать из него 13 символов, которые вывести на экран
Открыть файл для записи, записать в него символьная строка, закрыть файл, открыть его для чтения и прочитать из него 13 символов, которые...

задан файл неопределённой длины, прочитать все записи, номер которых кратен 5 и вывести их на экран
задан файл неопределённой длины, прочитать все записи, номер которых кратен 5 и вывести их на экран.

Записать в типизированный файл несколько целых чисел, после чего вывести эти целые числа из типизированного файла на экран монитора
1. Создать или открыть текстовый (типизированный, нетипизированный) файл. 2. Выполнить над текстовым (типизированным, ...

Записать в типизированный файл несколько вещественных чисел, после чего вывести эти вещественные числа из типизированного файла на экран монитора.
Записать в типизированный файл несколько вещественных чисел, после чего вывести эти вещественные числа из типизированного файла на экран...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru