Я решил проблему записи массива TBitmap в файл и его повторного чтения.
Идея заключается в загрузке каждого TBitmap во временный TMemoryStream. Член
TMemoryStream.Size информирует о размере данных, которые нужно сохранить на
диске. Затем мы пишем размер и сопровождаем его данными типа TFileStream. Эту
манипуляцию мы проделываем для каждого TBitmap в массиве.
Для процедуры чтения сначала мы должны считать из потока размер данных
TBitmap. Затем мы распределяем область для типа TMemoryStream полученного
размера и считываем данные. Затем переписываем из TFileStream в TMemoryStream.
И, наконец, мы читает из TMemoryStream сам TBitmap. Эту манипуляцию мы
проделываем для каждого TBitmap в массиве.
Ниже я привел код, который я реально использовал. Код из игры Bingo, которую
я разрабатываю, имеет сетку 5x5, чьи ячейки содержат изображение.
Реализация алгоритма весьма медленна, поэтому если вы имеете или найдете
более быстрый алгоритм, пожалуйста, уведомите меня об этом. Если у вас есть
любые вопросы, пожалуйста, свяжитесь со мной.
Сохранение массива TBitmap в файл и его повторное чтение решается за счет загрузки каждого TBitmap в временный TMemoryStream, записи размера данных и сопровождения их данными типа TFileStream.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS