|
Вопрос # 2 169/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
У меня есть текстовый файл размером примерно 54 Мб; в нём примерно 4800(без пробелов) строк и в каждой строке 5400(без пробелов) символов, эти символы - 0 и 1 записанны через побел; надо преобразовать этот файл в рисунок Bmp (размеры рисунка 5400 на 4800), я создаю битовый образ, считываю текстовый файл read(f,a), если a= 0, то заполняю соответственный пиксель в битовом образе clWhite, a=1 то clBlack, но в процессе выполнения выдаётся ошибка о нехватке памяти на выполнение команды.
Как увеличить максимальную память выделяемую под под программу в Delphi 7?
Оператор pict.savetofile('путь') (pict-битовый образ) будет сохранять в рисунок формате BMP?
 |
Вопрос задал: 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™ (статус: Доктор наук), 7 декабря 2008, 13:33 [#1]:
Выложи свой текстовый файл, я попробую.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Nasgool (статус: 2-ой класс), 7 декабря 2008, 13:53 [#2]:
Насколько я знаю, TTextFile воспинимается дельфой как набор стрингов, а стринг по определению 255 символов ))) попробуй типизированным файлом открывать
|
|
SKoch92 (статус: Посетитель), 7 декабря 2008, 14:05 [#3]:
Как сделать чтобы в битовом образе на пиксель выделялся только 1 байт (256 цветов) или менее (16 цветов или моно).
|
|
Вадим К (статус: Академик), 7 декабря 2008, 14:12 [#4]:
В Bitmap или при прямой работой с файлом?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
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 (статус: Посетитель), 7 декабря 2008, 14:30 [#6]:
Спасибо!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|