Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 169

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
У меня есть текстовый файл размером примерно 54 Мб; в нём примерно 4800(без пробелов) строк и в каждой строке 5400(без пробелов) символов, эти символы - 0 и 1 записанны через побел; надо преобразовать этот файл в рисунок Bmp (размеры рисунка 5400 на 4800), я создаю битовый образ, считываю текстовый файл read(f,a), если a= 0, то заполняю соответственный пиксель в битовом образе clWhite, a=1 то clBlack, но в процессе выполнения выдаётся ошибка о нехватке памяти на выполнение команды.
Как увеличить максимальную память выделяемую под под программу в Delphi 7?
Оператор pict.savetofile('путь') (pict-битовый образ) будет сохранять в рисунок формате BMP?

SKoch92 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: SKoch92 (статус: Посетитель)
Вопрос отправлен: 7 декабря 2008, 13:20
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Вадим К

Здравствуйте, SKoch92!
Почему, если что то не работает и используем Делфи, то это делфи виновата? Обычно причина в другом месте. В данном случае, не совсем понятно, зачем такая большая картинка. А GDI функции Windows, которые использует делфи для рисование битмапов имеет ограничение. Насколько я помню, оно где то в районе 2048на1500. Но оно точно меньше, чем то, которое вы захотели.
Что же делать?
- создавать несколько картинок поменьше. потом их складывать мозаикой. иногда это единственное решение.
- учитывая, что внутренее ограничение bmp - это 65535на65535 (двохбайтовое), то создать такую картинку можно. Правада надо не забывать, что некоторые "просмотрщики графики" не смогут открыть такую картинку. Кстати и TImage тоже не сможен.... причины изложены выше. Итак, попробуем создать вручную, это не сложно. Надо сгенерировать файл вручную. Это совсем не сложно - файл состоит с заголовка стандартного размера и собственно данных.
Для этого почитайте вначале
http://jenyay.net/index.php?id=bmp - это о собственно формате. Код там есть, но он на С++
потом посмотреть на http://www.delphidabbler.com/tips/19 - это будет подсказка, как в делфи читать с bmp файла. А также на это http://www.abc-it.lv/index.php/id/985
После этого садиться и писать. Приимущество, которое будет - это будет работать очень быстро. Очень:)
- и последний вариант - попробовать использовать альтернативные реализации. Возможно это будет быстрее. Посмотрите здесь http://www.delphimaster.ru/articles/dib/index.html

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 7 декабря 2008, 13:49


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 7 декабря 2008, 14:30; участников в обсуждении: 4.
min@y™

min@y™ (статус: Доктор наук), 7 декабря 2008, 13:33 [#1]:

Выложи свой текстовый файл, я попробую.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Nasgool

Nasgool (статус: 2-ой класс), 7 декабря 2008, 13:53 [#2]:

Насколько я знаю, TTextFile воспинимается дельфой как набор стрингов, а стринг по определению 255 символов ))) попробуй типизированным файлом открывать
SKoch92

SKoch92 (статус: Посетитель), 7 декабря 2008, 14:05 [#3]:

Как сделать чтобы в битовом образе на пиксель выделялся только 1 байт (256 цветов) или менее (16 цветов или моно).
Вадим К

Вадим К (статус: Академик), 7 декабря 2008, 14:12 [#4]:

В Bitmap или при прямой работой с файлом?
Галочка "подтверждения прочтения" - вселенское зло.
min@y™

min@y™ (статус: Доктор наук), 7 декабря 2008, 14:15 [#5]:

Цитата:


Как сделать чтобы в битовом образе на пиксель выделялся только 1 байт (256 цветов) или менее (16 цветов или моно).


Если ты работаешь с TBitmap, то открой хэлп и глянь свойство TBitmap.PixelFormat. Это то самое оно.

Indicates the bit format of the bitmap image, specifying how the image is displayed and how the pixels of the bitmap image are stored in memory.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SKoch92

SKoch92 (статус: Посетитель), 7 декабря 2008, 14:30 [#6]:

Спасибо!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.03 сек.