Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Сохранение пикселей в графический формат файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Длинная арифметика http://www.cyberforum.ru/cpp-beginners/thread249183.html
Привет всем! помогите пожалуйста кодом. Необходимо реализовать операцию сравнения двух длинных чисел A>=B Заранее спасибо
C++ Задание. Помогите кто шарит реализовать параметрическим оператором цикла for. Первое задание реализовать с параметрами цикла по переменной x, а второе задание – по числу повторений. Получить таблицу значений функции. ... http://www.cyberforum.ru/cpp-beginners/thread249180.html
Нужно решить. C++
Нужно решить с помощью ветвлений и циклов на языке Си.
Не копируется строка C++
Подскажите мне, пожалуйста, в чём проблема. Пытаюсь написать аналог функции strcpy, но выдает, при компиляции нормально, а когда запускаю, выдает попытку записи в защищенную память, вот код:#include...
C++ Найти сумму отрицательных элементов массива http://www.cyberforum.ru/cpp-beginners/thread249164.html
Приветствую всех)) Проблема в том что программу надо реализовать в виде функции, а я без малейшего понятия как ето делать)) помогите кто чем может) В одномерном массиве, состоящем из n вещественных...
C++ Почему функция передает не то значение Помогите пожалуйста разобраться. Никак не могу понять, почему #include <stdio.h> int s (char*); int main (void) { char str = "Hello world!"; int lenght = s(str); printf ("Lenght =... подробнее

Показать сообщение отдельно
ping_rulezzz
26 / 26 / 4
Регистрация: 18.02.2011
Сообщений: 51
27.02.2011, 11:23
в примере практически нет обработок ошибок - служит только для того, чтобы показать принцип работы. Также в примере есть структура RGB - в то время, когда я разбирался с bmp форматом, не знал про стандартную структуру RGBTRIPLE, поэтому пришлось нагородить чуть-чуть)).
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include "stdafx.h"
#include "iostream"
#include "fstream"
#include "windows.h"
#include "math.h"
using namespace std;
 
struct RGB {
    int B;
    int G;
    int R;
};
 
BYTE CreateBMP(LPTSTR lpFileName, WORD BMPWidth, WORD BMPHeight, RGB **lpData);
 
int main(int argc, char* argv[])
{
 
 
    char file[] = "test.bmp";
    FILE * f_in;  
    BITMAPFILEHEADER bmFileHdr;  
    BITMAPINFO bmInfo;  
     
    // open file to read  
    if ((f_in = fopen(file, "rb")) == NULL)   
        cout<<"Error opening file "<<file<<endl;  
    
    // read BITMAPFILEHEADER  
    fread((char *)&bmFileHdr, sizeof(BITMAPFILEHEADER), 1, f_in);  
    fread((char *)&bmInfo, sizeof(BITMAPINFO), 1, f_in);  
    fseek(f_in, bmFileHdr.bfOffBits, SEEK_SET); // set the pointer to start reading the bmp data  
    
    RGB **pixel = new RGB*[bmInfo.bmiHeader.biHeight];
    for(int i = 0; i < bmInfo.bmiHeader.biHeight; ++i) {
        pixel[i] = new RGB[bmInfo.bmiHeader.biWidth];
    }
    size_t padding = 0;
    if ((bmInfo.bmiHeader.biWidth * 3) % 4) padding = 4 - (bmInfo.bmiHeader.biWidth * 3) % 4;
 
    for(int i = 0; i < bmInfo.bmiHeader.biHeight; i++) {  
        for(int j = 0; j < bmInfo.bmiHeader.biWidth; j++) {   
            pixel[i][j].B = fgetc(f_in);   
            pixel[i][j].G = fgetc(f_in);   
            pixel[i][j].R = fgetc(f_in);   
        }   
        
        for (size_t t = 0; t < padding; ++t) {
            fgetc(f_in);
        }
 
    }  
    
    RGB **newpixel = new RGB*[32];
    for(int i = 0; i < 32; ++i) {
        newpixel[i] = new RGB[32];
    }
    
    for(int i = 0; i < 32; ++i) {
        for(int j = 0; j < 32; ++j) {
            newpixel[i][j] = pixel[i][j];
        }
    }
 
 
    BYTE f = CreateBMP(_T("temp.bmp"), 32, 32, newpixel);
    
    for(size_t i = 0; i < bmInfo.bmiHeader.biHeight; i++)
        delete []pixel[i];
    delete []pixel;
 
    for(size_t i = 0; i < 32; i++)
        delete []newpixel[i];
    delete []newpixel;
 
    return 0;
}
 
 
 
BYTE CreateBMP(LPTSTR lpFileName, WORD BMPWidth, WORD BMPHeight, RGB **lpData)
{
   LPBYTE            lpBits;        // Указатель на данные BMP
   HANDLE            hOutFile;      // Хендл файла
   PBITMAPINFOHEADER lpMyBMPInfo;   // Информационная структура BMP
   PBITMAPFILEHEADER lpMyFileInfo;  // Структура инфы файла BMP
   DWORD             dwTmp; 
 
   BYTE              bOver;         // Дополнение до 4 байтной границы
   DWORD             dwDataSize;    // Общий рамер данных BMP (с выравниванием)
 
   if ((BMPWidth*3)%4) bOver = 4 - (BMPWidth*3)%4;
   else bOver = 0;
 
   dwDataSize = BMPHeight*(BMPWidth*3 + bOver);
 
   lpBits = new BYTE[dwDataSize];   
 
   DWORD inum = 0;
   for (DWORD iy = 0; iy < BMPHeight; iy++)
   {
      for (DWORD ix = 0; ix < BMPWidth; ix++)
      {
         // R
         lpBits[inum] = lpData[iy][ix].B;
         inum++;
         // G
         lpBits[inum] = lpData[iy][ix].G;
         inum++;
         // B
         lpBits[inum] = lpData[iy][ix].R;
         inum++;
 
      }      
 
      for (BYTE i = 0; i < bOver; i++)
      {
         lpBits[inum] = 0;
         inum++;
      }
   }
 
   lpMyBMPInfo = new BITMAPINFOHEADER;
 
   lpMyBMPInfo->biSize   = sizeof(BITMAPINFOHEADER);
   lpMyBMPInfo->biHeight = BMPHeight; 
   lpMyBMPInfo->biWidth  = BMPWidth; 
   lpMyBMPInfo->biPlanes = 1;
   lpMyBMPInfo->biBitCount = 24;
   lpMyBMPInfo->biCompression = BI_RGB;
   lpMyBMPInfo->biSizeImage = 0;
   lpMyBMPInfo->biClrImportant = 0;
   lpMyBMPInfo->biClrUsed = 0;
 
   lpMyFileInfo = new BITMAPFILEHEADER;
   
   lpMyFileInfo->bfType = 0x4d42;
   lpMyFileInfo->bfReserved1 = 0;
   lpMyFileInfo->bfReserved2 = 0;   
   lpMyFileInfo->bfOffBits = (DWORD) sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);
   lpMyFileInfo->bfSize = (DWORD) (dwDataSize + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER));
  
   hOutFile = CreateFile(lpFileName, GENERIC_READ | GENERIC_WRITE, 
                         (DWORD) 0, NULL, CREATE_ALWAYS, 
                         FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL); 
   
   if (hOutFile == INVALID_HANDLE_VALUE) return 0; 
   
   WriteFile(hOutFile, (LPVOID) lpMyFileInfo, sizeof(BITMAPFILEHEADER), (LPDWORD) &dwTmp, NULL);
 
   WriteFile(hOutFile, (LPVOID) lpMyBMPInfo, sizeof(BITMAPINFOHEADER), (LPDWORD) &dwTmp, NULL);
 
   WriteFile(hOutFile, (LPVOID) lpBits, dwDataSize, (LPDWORD) &dwTmp, NULL);
 
   CloseHandle(hOutFile);
   
   delete[] lpBits;
   delete lpMyFileInfo;
   delete lpMyBMPInfo;
 
   return 1;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru