Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 14.10.2015
Сообщений: 13

Прекращает читать fstream после ~17000 байт

15.10.2015, 01:46. Показов 888. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такая проблема...
Я написал программу, которая считывает формат ico, сохраняет заголовок (62 байта) в структуру, и затем отрисовывает в консоли пиксели по 4 байта (RGB, Alpha). Но после отрисовки где то 1/4 изображения размером 128х128, остаток заполняется последним правильно прочитанным цветом...

Я не знаю, может есть какие то ограничения в работе c fstream... Подскажите, почему не отрисовывается изображение полностью?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <fstream>
 
using namespace std;
 
typedef unsigned __int16 WORD;
 
 
struct ICONDIR { // 6 байт
    short   idReserved;
    short   idType;
    short   idCount;
} ICONHEADER;
 
struct ICOINFO { // 16 байт технической информации и 40 байт сдвига
    char    iiWidth;
    char    iiHeight;
    char    iiColors;
    char    iiReserved;
    short   iiPlanes;
    short   iiBbp; // Bytes per pixel
    int     iiSize;
    int     iiOffset;
    double  iiTrash1;
    double  iiTrash2;
    double  iiTrash3;
    double  iiTrash4;
    double  iiTrash5;
} ICONINFOIMAGE;
// Изображение начинается после 62 байта и заканчивается 65598 байтом 
 
// Последние 2048 байтов - маска
// Для размера 128х128
 
HWND hwnd = GetConsoleWindow();
HDC hdc = GetDC(hwnd);
 
void draw(int x, int y, unsigned color)
{
    int red = color >> 24;
    int green = color << 8; green = green >> 16;
    int blue = color << 16; blue = blue >> 8;
    int pixSize = 2;
    int sX = x*pixSize;
    int sY = y*pixSize;
    int eX = x*pixSize + pixSize;
    int eY = y*pixSize + pixSize;
    HPEN red_pen = CreatePen(PS_SOLID, 1, RGB(red, green, blue));
    HBRUSH red_brush = CreateSolidBrush(RGB(red, green, blue));
 
    SelectObject(hdc, red_pen);
    SelectObject(hdc, red_brush);
 
    Rectangle(hdc, sX, sY, eX, eY);
}
 
 
 
void main()
{
    char name[256];
    ifstream file("mastercard.ico", ios::binary | ios::in);
    file.read((char*)&ICONHEADER, sizeof ICONDIR);
    file.read((char*)&ICONINFOIMAGE, sizeof ICOINFO);
    unsigned buff;
    for (int i = 16+ abs((int)ICONINFOIMAGE.iiHeight); i > 16 + 0; i--)
        {
            for (int j = 0; j < abs((int)ICONINFOIMAGE.iiWidth); j++)
            {
                if (!(file.read((char*)&buff, sizeof buff))) cout << i << ' ' << j << endl;;
                draw(j, i, buff);
            }
        }
    file.close();
    Sleep(0xffffffff);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2015, 01:46
Ответы с готовыми решениями:

Fstream. ищу пример записи в текстовый файл и его же читать
Всем здрасьте. сейчас пока так открываю файл для записи строк std::ofstream output1; output1.open(FILENAME); // для записи if...

Как вывести 10 байт после определенных байт из файла
Здравствуйте. Есть к примеру файл с расширением *.bin, подскажите как реализовать вывод на экран 12 байт после определенных найденных в...

Никак не могу понять, как узнать, сколько байт читать из сокета
Честно говоря, пишу не на C++, но вопрос этот может возникнуть в любом языке. Вот, допустим, я пишу клиент к какому-то протоколу (не буду...

3
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.10.2015, 04:40
На каждый пиксель вызывать CreatePen и CreateSolidBrush - плохая идея.
Проблема в отрисовке, или в считывании?
0
0 / 0 / 1
Регистрация: 14.10.2015
Сообщений: 13
15.10.2015, 10:54  [ТС]
Я пробовал выносить создание объектов HPEN и HBRUSH за пределы функции, и присваивать им значения с соответствующим цветом...
Все равно.
В общем, как я понял, есть ограничение на создание фигур в пределах одного объекта HDC и это плохой способ вывода. Чем можно еще вывести содержимое на экран в 24битном цвете?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.10.2015, 12:23
Открой для себя чудесный набор функций WinAPI.
DrawIconEx
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2015, 12:23
Помогаю со студенческими работами здесь

Программа прекращает работу после первого значения <Y>
Программа прекращает работу после первого значения &lt;Y&gt;, игнорируя условия цикла. #define _USE_MATH_DEFINES #include...

AVZ прекращает работу после нескольких секунд
Качаю AVZ , обновляю базу и запускаю глубокий анализ на Windows 10. AVZguard недоступен. После нескольких секунд работы программа...

Браузер Опера прекращает работу после открытия
Здравствуйте! Недавно возникла проблема с браузером: всегда пользуюсь Оперой, но она стала закрываться с типовой ошибкой...

Программа, во время выполнения, после ввода, прекращает работу
Проблема такая: Предисловие... Недавно я уже обращался сюда на форум из-за того, что с функцией randomize программа не компилировалась....

AVZ прекращает работу после нескольких минут сканирования
Здравствуйте.Заметил в диспетчере задач,что всякие svchost'ы и NetworkService c рестрикетами да прочей мутью,частенько прям рвутся в...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru