Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для fjay69
90 / 90 / 17
Регистрация: 26.10.2012
Сообщений: 249

Рисунок получается битым

13.03.2013, 20:14. Показов 501. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В ходе обучения создал простенький генератор точечных рисунков. Столкнулся с проблемой. Описание в комментариях.
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 <stdio.h>
#include <iostream>
#include <windows.h>
using namespace std;
 
#pragma pack (push, 1)
struct bmpHeader
{
    //header
    char type[2];
    DWORD fileSize;        
    WORD reserved1;
    WORD reserved2;
    DWORD offset;
    //info
    DWORD infoSize;
    unsigned long width;
    unsigned long height;
    WORD planes;
    WORD bitPerPixel;
    DWORD compression;
    DWORD imageSize;
    unsigned long xPerMeter;
    unsigned long yPerMeter;
    DWORD colorUsed;
    DWORD colorImportant;
    //color table       
};
#pragma pack (pop)
 
int main()
{
  FILE* file;
  bmpHeader headr;
  char color[3];
 
  rename(tmpnam(NULL),"temp.bmp");//создаём пустой файл и перемещаем в папку с программой
  file = fopen("temp.bmp", "wb+");//открываем для записи
  //генерируем заголовок
  headr.type[0]='B';
  headr.type[1]='M';
  headr.reserved1 = 0;
  headr.reserved2 = 0;
  headr.compression = 0;
  headr.colorUsed = 0;
  headr.colorImportant = 0;
  
  headr.width = 101;//если ширина больше 100, рисунок получается битым
  headr.height = 102;
  headr.bitPerPixel = 24;
  headr.offset = 54;
  headr.infoSize = 40;
  headr.planes = 1;
  headr.xPerMeter = 3780;
  headr.yPerMeter = 3780;
  
  headr.imageSize = headr.bitPerPixel / 8 * headr.width * headr.height;
  headr.fileSize = headr.imageSize + headr.offset;  
  //записываем заголовок
  cout<<"Writing header...\n";    
  fwrite(&headr,sizeof(headr),1,file);
  //генерация и запись изображения  
  for (int h=0;h<headr.height;h++)
  {
    for (int w=0;w<headr.width;w++)
    {
      // забиваем все точки белым цветом        
        color[0] = 255;
        color[1] = 255;
        color[2] = 255;
        fwrite(color,3,1,file);      
    }  
  }
    
  fclose(file);
  
  return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2013, 20:14
Ответы с готовыми решениями:

Графический Рисунок(нужно составить рисунок на С++ в форме желтой звезды)
нужно составить рисунок на С++ в форме желтой звезды

WebClient - скачанный файл оказывается битым
Всем доброго времени суток! Возникла такая проблема. Пытаюсь скачать файл по следующей ссылке: http://respect14.ru/price.xls Качая...

Может ли быть связь подтормаживания (заикания) с битым диском?
Проблема длится уже относительно давно. 3-4 месяца Тормозит ноут при выводе текста, неважно где - браузер, текстовый редактор. Прокрутка...

2
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
13.03.2013, 20:18
Может вы с заголовком напартачили? В windows.h есть готовые структуры загловков для битмапов.
0
 Аватар для fjay69
90 / 90 / 17
Регистрация: 26.10.2012
Сообщений: 249
13.03.2013, 21:32  [ТС]
Если бы я хотел использовать заголовки из windows.h, я бы так и сделал, но по идее эта программа тоже должна работать! Вопрос открыт.

Добавлено через 29 минут
В ходе анализа правильного bmp-изображения в WinHex выяснилось, что в конце каждого ряда точек стоит нулевой байт. Программа заработала.

Добавлено через 27 минут
Всё оказалось хитрее, чем я думал изначально. Оказывается, ширина рисунка, помноженная на глубину цвета (байт/пиксель) должна быть кратна 4. Отсюда и дополнительные нули

Добавлено через 14 минут
Поправка: просто ширина должна быть кратна четырём, а не как написано
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2013, 21:32
Помогаю со студенческими работами здесь

Растровый рисунок, как вставить bmp-рисунок в окно на полный экран?
Всем здрасьте! По книге которой я учусь , не понятно описано как вставить какую-нибудь картиночку в окно. Помогите мне , напишите как...

Как создать рисунок и сохранить его в bmp (точечный рисунок)
Здравствуйте, пишу свой графический редактор и вот не знаю как из того что я рисую в графе сконструировать рисунок , а потом сохранить его...

На странице есть рисунок. При наведении мыши на этот рисунок он должен измениться
На странице есть рисунок. При наведении мыши на этот рисунок он должен измениться. Когда Вы отведете мышку в сторону, рисунок должен...

Установите в документе рисунок с кнопкой При нажатии кнопки рисунок должен смениться
Ув. пользователи! Прошу помочь мне с некоторыми задачами по Java Script: 1) Установите в документе рисунок с кнопкой. При нажатии...

модуль СМ Indesit Arcadia SW 16.01.05 с битым Rennesans, СМ Indesit IWTE 51051ECO(EU), 73771880000
Первый раз такой попался. Помогите определиться можно ли заменить на Friscale или вместе с субмодулем и с какой прошивкой ?


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru