Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод картинок в графическом режиме 
:(
    Опции темы
Inst
Дата 28.5.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Работаю в графическом режиме 16 цетов, 640*480.
Написал фунцкию вывода картинок:
Код

char *picture (char *filename)
{
    FILE *fl;
    char *p1;
    unsigned long size;
    fl=fopen (filename,"r");
    size=filelength(fileno(fl));
    p1=(char*)malloc(size);
    fread (p1,1,size,fl);
    fclose (fl);
    printf ("%d",size);
    getch ();
    return (p1);
}


Потом, например: 
Код

char *fon = picture ("fon");
putimage (0,0,fon,1);

(Да, картинки в формате gra, т.е. они вообще без разрешения, я их из bmp специальной программой конвертировал)
Но: обычно в Паскале подобной фунцкией я выводил без проблем картинки до 64 кб. Здесь же иногда выведет картинку 38 кб нормально (на которой допустим мало содержимого), а иногда 8кб вообще криво выводит, с помехами, не знаю, size переглючивает.
Подскажите, что делать? Или есть еще норм. способ вывода картинок?
з.ы. Среда: Borland C под DOS =)
Заранее спасибо 
PM MAIL   Вверх
Inst
Дата 28.5.2006, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Так, есть прогресс:
Если исправить вот так:
fl=fopen (filename,"rb");
Т.е. не "r" а "rb"  (я так понял это readblock) то читает нормально файлы до 32кб. 
Но все же, чтобы вывести картинку на полный экран (128 кб) получается ее надо разбить на 4 файла. Не удобно, особенно если у меня много таких картинок... smile((
Не знаете как можно сделать чтобы считывать и выводить большие картинки? (128кб или хотя бы уж 64кб).
Заранее спасибо (еще раз) =) 
PM MAIL   Вверх
volvo877
Дата 29.5.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 1
Всего: 116



Inst, зачем мешать в одну кучу С и С++?
Пользуйся чем-то одним:
Код
char far *picture (char *filename)
{
    FILE *fl;
    char *p1;
    unsigned long size;
    fl = fopen (filename,"rb"); // Это, кстати, Read Binary, а не Read Block
    fseek(fl, 0L, SEEK_END);
    size=ftell(fl);
    p1=(char far *)farmalloc(size); // farmalloc может выделять больше 64К
    fread (p1,1,size,fl);
    fclose (fl);
    printf ("%d",size);
    getch ();
    return (p1);
}

...
char far *fon = picture ("fon");
putimage(0, 0, fon, 1);
...

Только вот программу компилируй НЕ в модели памяти "tiny" 
PM MAIL   Вверх
Inst
Дата 29.5.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Цитата(volvo877 @  29.5.2006,  17:32 Найти цитируемый пост)
Только вот программу компилируй НЕ в модели памяти "tiny" 

Спасибо, но вот это что значит?
 
PM MAIL   Вверх
Inst
Дата 30.5.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 24.5.2006

Репутация: нет
Всего: нет



Ааа подскажите, что делать, у меня на середине программа виснет или вообще перестает что-то выводить в граф. режиме!
Наверное она съедает всю память!
Что делать? 
Мне проект завтра сдавать =))
В функции подгрузки картинок я использую free (p1);
Все равно такое ощущение как будто памяти [censored 6]...
(Пишу же под DOS борландом, там памяти дается наверное килобайт 128, [censored 6] smile )
Заранее спасибо за помощь! 
PM MAIL   Вверх
bsa
Дата 31.5.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Ты, наверное, забываешь сделать free, для выделенной памяти. Поэтому у тебя она и съедается.
К тому же, размер блока, который могут читать стандартные досовые функции - 65535 (именно 65536-1) байт.
У меня есть сомнения, что возможно чтение через границу сегментов. Поэтому, самый лучший способ это: открытие файла, выделение буфера, чтение части картинки в буфер, вывод на экран, чтение следующей части..., освобождение буфера, закрытие файла. 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.