Click here to Skip to main content
15,849,547 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
QuestionCTreeObject class Pin
_Flaviu3-Oct-17 23:59
_Flaviu3-Oct-17 23:59 
AnswerRe: CTreeObject class Pin
«_Superman_»4-Oct-17 0:07
professional«_Superman_»4-Oct-17 0:07 
GeneralRe: CTreeObject class Pin
_Flaviu5-Oct-17 22:38
_Flaviu5-Oct-17 22:38 
QuestionCImage processing Pin
rbrunton3-Oct-17 3:03
rbrunton3-Oct-17 3:03 
GeneralRe: CImage processing Pin
Richard MacCutchan3-Oct-17 8:53
mveRichard MacCutchan3-Oct-17 8:53 
Questionraytracer Pin
bluatigro29-Sep-17 4:36
bluatigro29-Sep-17 4:36 
QuestionRe: raytracer Pin
David Crow29-Sep-17 5:21
David Crow29-Sep-17 5:21 
AnswerRe: raytracer Pin
Jochen Arndt29-Sep-17 5:24
professionalJochen Arndt29-Sep-17 5:24 
The first thing to know is that the bytes per pixel line must be a 32-bit multiple. That means, that you have to allocate additional space for the fill bytes if necessary when preparing a full buffer or write data line by line. So you have to calculate the bytes per line first (here for 24 bits per pixel):
unsigned nWidthBytes = ((screenx * 24 + 31) & ~31) / 8;
// EDIT: Corrected
//unsigned nExtra = 8 * ((screenx * 24) % 32);
unsigned nExtra = nWidthBytes - 3 * screenx;

This can the be used to calculate the total size of pixel data and the number of extra bytes pewr line:
unsigned nPixelSize = nWidthBytes * screeny;
Note also that you should re-organise your pixel data for this (exchange x and y):
PIXEL pixel[ screeny ][ screenx ] ;


For the other fields use these (untested):
// File header
FileHdr.bfType = 0x4D42; // "BM"
FileHdr.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 3 * sizeof(DWORD) + nPixelSize;
FileHdr.bfReserved1 = pBmHdr.bfReserved2 = 0;
// EDIT: Corrected
//FileHdr.bfOffBits = sizeof(BITMAPFILEHEADER);
FileHdr.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 3 * sizeof(DWORD);

// Info header for 24-bit RGB
InfoHdr.biSize = sizeof(BITMAPINFOHEADER);
InfoHdr.biWidth = screenx;
InfoHdr.biHeight = screeny;
InfoHdr.biPlanes = 1;
InfoHdr.biBitCount = 24;
InfoHdr.biCompression = BI_BITFIELDS;
InfoHdr.biSizeImage = nPixelSize;
InfoHdr.biXPelsPerMeter = 0;
InfoHdr.biYPelsPerMeter = 0;
InfoHdr.biClrUsed = 0;
InfoHdr.biClrImportant = 0;

// Color table (bit masks for the three colours) with BI_BITFIELDS
// NOTE: I'm actually not sure if these must be reversed!
DWORD clrTable[3] = { 0xff, 0xff00, 0xff0000 };

fwrite(&FileHdr, 1, sizeof(BITMATFILEHEADER), file);
fwrite(&InfoHdr, 1, sizeof(BITMATINFOHEADER), file);
fwrite(clrTable, 1, sizeof(clrTable), file);
for (int y = 0; y < screeny; y++)
{
    // EDIT: Corrected
    //fwrite(pixel[y], 3, nWidthBytes, file);
    fwrite(pixel[y], 3, screenx, file);
    if (nExtra)
    {
        DWORD dummy = 0;
        fwrite(&dummy, 1, nExtra, file);
    }
}


modified 1-Oct-17 4:13am.

GeneralRe: raytracer Pin
leon de boer30-Sep-17 8:50
leon de boer30-Sep-17 8:50 
GeneralRe: raytracer Pin
Jochen Arndt30-Sep-17 23:14
professionalJochen Arndt30-Sep-17 23:14 
AnswerRe: raytracer Pin
Rick York29-Sep-17 5:44
mveRick York29-Sep-17 5:44 
GeneralRe: raytracer Pin
leon de boer30-Sep-17 8:39
leon de boer30-Sep-17 8:39 
GeneralRe: raytracer Pin
bluatigro1-Oct-17 1:35
bluatigro1-Oct-17 1:35 
GeneralRe: raytracer Pin
bluatigro1-Oct-17 2:00
bluatigro1-Oct-17 2:00 
GeneralRe: raytracer Pin
leon de boer1-Oct-17 5:45
leon de boer1-Oct-17 5:45 
GeneralRe: raytracer Pin
bluatigro1-Oct-17 6:56
bluatigro1-Oct-17 6:56 
GeneralRe: raytracer Pin
leon de boer1-Oct-17 17:20
leon de boer1-Oct-17 17:20 
GeneralRe: raytracer Pin
bluatigro2-Oct-17 2:34
bluatigro2-Oct-17 2:34 
GeneralRe: raytracer Pin
leon de boer2-Oct-17 4:46
leon de boer2-Oct-17 4:46 
GeneralRe: raytracer Pin
leon de boer2-Oct-17 11:00
leon de boer2-Oct-17 11:00 
GeneralRe: raytracer Pin
bluatigro2-Oct-17 23:57
bluatigro2-Oct-17 23:57 
GeneralRe: raytracer Pin
leon de boer3-Oct-17 5:47
leon de boer3-Oct-17 5:47 
GeneralRe: raytracer Pin
bluatigro6-Oct-17 2:30
bluatigro6-Oct-17 2:30 
GeneralRe: raytracer Pin
bluatigro22-Oct-17 23:37
bluatigro22-Oct-17 23:37 
QuestionCPP Syntax Pin
Bram van Kampen28-Sep-17 12:17
Bram van Kampen28-Sep-17 12:17 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.