Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
1

Записать в массив RGB-цвета bmp-файла

05.11.2014, 19:36. Показов 3552. Ответов 10
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;
int main()
{ 
    unsigned char  x;
    ifstream image("screen.bmp",ios::binary|ios::in);
    {
        while(!image.eof())
        { 
        image.read((char*)&x,sizeof x);
            
            cout<<x;
        }}
 
    return 0;
}
выводит абракадабру
В чем ошибка?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2014, 19:36
Ответы с готовыми решениями:

Как выделить определенный диапазон цвета RGB на картинке bmp?
всем доброго времени суток!помогите,пожалуйста, в написании кода.есть картинка bmp. Надо разложить...

Как записать RGB цвета в массив?
Здравствуйте, вот собственно код, нашел на форуме, выводит цвета нормально, но хочу записать эти...

BMP в массив из RGB
Как такое можно провернуть? Глубина цвета - 24. Мб какие библиотеки есть для этого?

Получить RGB bmp файла
Всем привет. Стоит задача получить массив пикселей с помощью Bitmap Я нуб в этом, но написал что...

10
Эксперт С++
4968 / 3075 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
05.11.2014, 19:52 2
Цитата Сообщение от kessor Посмотреть сообщение
В чем ошибка?
Может быть в том, что в файле screen.bmp записан не текст?
А самая главная твоя ошибка состоит в том, что ты не удосужился объяснить, какого результата ты ожидал.
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
05.11.2014, 19:58  [ТС] 3
Может быть в том, что в файле screen.bmp записан не текст?
А самая главная твоя ошибка состоит в том, что ты не удосужился объяснить, какого результата ты ожидал.
Ну собственно необходимо записать в массив RGB-цвета bmp-файла
Что использовать?
0
58 / 45 / 11
Регистрация: 16.09.2014
Сообщений: 124
05.11.2014, 20:04 4
google -> BMP specification
0
Эксперт С++
4968 / 3075 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
05.11.2014, 20:22 5
Цитата Сообщение от kessor Посмотреть сообщение
Ну собственно необходимо записать в массив RGB-цвета bmp-файла
Что использовать?
Используй массив. Зачем ты выводишь байты на экран?
О том что такое массив и как его использовать - читай книги.
О формате BMP-файла - ищи "BMP file format" в гугле.

Добавлено через 11 секунд
Цитата Сообщение от kessor Посмотреть сообщение
Ну собственно необходимо записать в массив RGB-цвета bmp-файла
Что использовать?
Используй массив. Зачем ты выводишь байты на экран?
О том что такое массив и как его использовать - читай книги.
О формате BMP-файла - ищи "BMP file format" в гугле.
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
05.11.2014, 20:23  [ТС] 6
Используй массив. Зачем ты выводишь байты на экран?
О том что такое массив и как его использовать - читай книги.
О формате BMP-файла - ищи "BMP file format" в гугле.
Очень информативно.
Зачем что-то писать если написать нечего?
0
Эксперт С++
4968 / 3075 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
05.11.2014, 20:36 7
Цитата Сообщение от kessor Посмотреть сообщение
Очень информативно.
Зачем что-то писать если написать нечего?
Форум для того, чтобы обсуждать проблемы и давать советы. Совет ты получил.
Если ты хочешь чтобы тебе написали программу - добро пожаловать в раздел платных услуг.
Если ты имел в виду что-то другое - опиши проблему более подробно, что не получается и т.п. Твой первый пост, кстати, тоже "очень информативный".
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
05.11.2014, 21:10  [ТС] 8
Если ты имел в виду что-то другое - опиши проблему более подробно, что не получается и т.п. Твой первый пост, кстати, тоже "очень информативный".
ОК
Имеется след код ( не мой)
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
Файл main.h
#ifndef MAIN_H_INCLUDED
#define MAIN_H_INCLUDED
 
 
typedef struct
{
    unsigned int    bfType;
    unsigned long   bfSize;
    unsigned int    bfReserved1;
    unsigned int    bfReserved2;
    unsigned long   bfOffBits;
} BITMAPFILEHEADER;
 
typedef struct
{
    unsigned int    biSize;
    int             biWidth;
    int             biHeight;
    unsigned short  biPlanes;
    unsigned short  biBitCount;
    unsigned int    biCompression;
    unsigned int    biSizeImage;
    int             biXPelsPerMeter;
    int             biYPelsPerMeter;
    unsigned int    biClrUsed;
    unsigned int    biClrImportant;
} BITMAPINFOHEADER;
 
typedef struct
{
    int   rgbBlue;
    int   rgbGreen;
    int   rgbRed;
    int   rgbReserved;
} RGBQUAD;
 
 
static unsigned short read_u16(FILE *fp);
static unsigned int   read_u32(FILE *fp);
static int            read_s32(FILE *fp);
 
#endif // MAIN_H_INCLUDEDs
 
Файл main.cpp
 
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "main.h"
 
int main()
{
    FILE * pFile = fopen("file.bmp", "rb");
 
    // считываем заголовок файла
    BITMAPFILEHEADER header; 
 
    header.bfType      = read_u16(pFile);
    header.bfSize      = read_u32(pFile);
    header.bfReserved1 = read_u16(pFile);
    header.bfReserved2 = read_u16(pFile);
    header.bfOffBits   = read_u32(pFile);
 
    // считываем заголовок изображения
    BITMAPINFOHEADER bmiHeader;
 
    bmiHeader.biSize          = read_u32(pFile);
    bmiHeader.biWidth         = read_s32(pFile);
    bmiHeader.biHeight        = read_s32(pFile);
    bmiHeader.biPlanes        = read_u16(pFile);
    bmiHeader.biBitCount      = read_u16(pFile);
    bmiHeader.biCompression   = read_u32(pFile);
    bmiHeader.biSizeImage     = read_u32(pFile);
    bmiHeader.biXPelsPerMeter = read_s32(pFile);
    bmiHeader.biYPelsPerMeter = read_s32(pFile);
    bmiHeader.biClrUsed       = read_u32(pFile);
    bmiHeader.biClrImportant  = read_u32(pFile);
 
 
    RGBQUAD **rgb = new RGBQUAD*[bmiHeader.biWidth];
    for (int i = 0; i < bmiHeader.biWidth; i++) {
        rgb[i] = new RGBQUAD[bmiHeader.biHeight];
    }
 
    for (int i = 0; i < bmiHeader.biWidth; i++) {
        for (int j = 0; j < bmiHeader.biHeight; j++) {
            rgb[i][j].rgbBlue = getc(pFile);
            rgb[i][j].rgbGreen = getc(pFile);
            rgb[i][j].rgbRed = getc(pFile);
        }
 
        // пропускаем последний байт в строке
        getc(pFile);
    }
 
    // выводим результат
    for (int i = 0; i < bmiHeader.biWidth; i++) {
        for (int j = 0; j < bmiHeader.biHeight; j++) {
            printf("%d %d %d\n", rgb[i][j].rgbRed, rgb[i][j].rgbGreen, rgb[i][j].rgbBlue);
        }
        printf("\n");
    }
 
    fclose(pFile);
    return 0;
}
 
 
static unsigned short read_u16(FILE *fp)
{
    unsigned char b0, b1;
 
    b0 = getc(fp);
    b1 = getc(fp);
 
    return ((b1 << 8) | b0);
}
 
 
static unsigned int read_u32(FILE *fp)
{
    unsigned char b0, b1, b2, b3;
 
    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);
 
    return ((((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}
 
 
static int read_s32(FILE *fp)
{
    unsigned char b0, b1, b2, b3;
 
    b0 = getc(fp);
    b1 = getc(fp);
    b2 = getc(fp);
    b3 = getc(fp);
 
    return ((int)(((((b3 << 8) | b2) << 8) | b1) << 8) | b0);
}
Выдавал error C4996 (вылечил при помощи ;_CRT_SECURE_NO_WARNINGS)
компилирует, запускает и выдает ошибку: stream != null(ругается на 68 строку где return 0;
0
Эксперт С++
4968 / 3075 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
05.11.2014, 21:28 9
Цитата Сообщение от kessor Посмотреть сообщение
выдает ошибку: stream != null
Полный текст всех ошибок можно? В коде я ошибок не нахожу..
0
4 / 4 / 2
Регистрация: 27.10.2014
Сообщений: 90
05.11.2014, 21:47  [ТС] 10
Полный текст всех ошибок можно? В коде я ошибок не нахожу..
скрин

Записать в массив RGB-цвета bmp-файла


Добавлено через 10 минут
Не мог открыть файл
Поправил, теперь др выдает:

Записать в массив RGB-цвета bmp-файла
0
Эксперт С++
4968 / 3075 / 456
Регистрация: 10.11.2010
Сообщений: 11,160
Записей в блоге: 10
05.11.2014, 23:20 11
У меня интернет слабоватый (хуже Dial-Up), да и в языке C++ я не особо шарю, но у меня есть подозрение что у тебя в циклах перепутаны ширина с высотой (могу ошибаться).
Ошибка возникает в Run-time, т.е., скорее всего где-то происходит выход за пределы границ памяти.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2014, 23:20

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Передача RGB цвета из .DLL файла
Доброго времени суток. Ситуация такова: есть DLL-ка с таким кодом: Public Class DLL_Colors ...

Записать изображение BMP в массив байт
Подскажите пожалуйста как записать BMP в массив байт и потом оттуда обратно заранее благодарен

Конвертер BMP в RGB
Добрый день,помогите пожалуйста, нужно создать конвертер BMP картинки в RGB для дальнейших...

Экспорт таблиц RGB из *.bmp в *.txt
Каким образом можно при помощи VBA (или VB) экпортировать таблицы RGB из файла *.bmp (или какого...

Чтение RGB значений из bmp 24 бита
Всем доброго времени суток. Вот такая проблема у меня: Есть 24-битный bmp рисунок(т.е. на каждый...

Как получить значения RGB из пикселя картинки .bmp С++
Здравствуйте. Мне нужна функция, которая считает с каждого пикселя картинки в формате .bmp его...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.