Нужно написать отчёт по этому коду


// lab_4View.cpp: реализация класса Clab4View
//

#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS можно определить в обработчиках фильтров просмотра реализации проекта ATL, эскизов
// и поиска; позволяет совместно использовать код документа в данным проекте.
#ifndef SHARED_HANDLERS
#include "lab_4.h"
#endif

#include "lab_4Doc.h"
#include "lab_4View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Clab4View

IMPLEMENT_DYNCREATE(Clab4View, CView)

BEGIN_MESSAGE_MAP(Clab4View, CView)
	// Стандартные команды печати
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &Clab4View::OnFilePrintPreview)
	ON_WM_CONTEXTMENU()
	ON_WM_RBUTTONUP()
END_MESSAGE_MAP()

// Создание или уничтожение Clab4View

Clab4View::Clab4View() noexcept : m_imageLoaded(false)
{
	// TODO: добавьте код создания

}

Clab4View::~Clab4View()
{
}

BOOL Clab4View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: изменить класс Window или стили посредством изменения
	//  CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

struct MY_BITMAPFILEHEADER
{
	char bfType[2];
	unsigned int bfSize;
	short int bfReserved1;
	short int bfReserved2;
	unsigned int bfOffBits;
};

struct MY_BITMAPINFOHEADER
{
	unsigned int biSize;
	unsigned int biWidth;
	unsigned int biHeight;
	short int biPlanes;
	short int biBitCount;
	unsigned int biCompression;
	unsigned int biSizeImage;
	unsigned int biXPelsPerMeter;
	unsigned int biYPelsPerMeter;
	unsigned int biClrUsed;
	unsigned int biClrImportant;
};

struct PALETA
{
	unsigned char B;
	unsigned char G;
	unsigned char R;
	unsigned char Z;
};

MY_BITMAPFILEHEADER antet_fis;
MY_BITMAPINFOHEADER antet_img;
unsigned char* p;
unsigned char cul;
unsigned char* pim;
int noct;
PALETA* pal;
CPoint m_ptMouse;

// Рисование Clab4View

void Clab4View::OnDraw(CDC* pDC)
{
	Clab4Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: добавьте здесь код отрисовки для собственных данных

    if (!m_imageLoaded) {
        FILE* f;
        FILE* f1;
        int NBPP;

        f = fopen("C:\\Users\\nnieb\\OneDrive\\Desktop\\univer\\grafica_2d\\lab_4\\carpet2.bmp", "rb");
        f1 = fopen("C:\\Users\\nnieb\\OneDrive\\Desktop\\univer\\grafica_2d\\lab_4\\carpet2.txt", "wt");
        fread(&antet_fis.bfType[0], sizeof(char), 1, f);
        fprintf(f1, "%c", antet_fis.bfType[0]);
        fread(&antet_fis.bfType[1], sizeof(char), 1, f);
        fprintf(f1, "%c", antet_fis.bfType[1]);
        if ((antet_fis.bfType[0] != 'B') || (antet_fis.bfType[1] != 'M'))
        {
            CString mes1(CString("Format not available!"));
            AfxMessageBox(mes1);
            return;
        }

        fread(&antet_fis.bfSize, sizeof(int), 1, f);
        fprintf(f1, "\n%d", antet_fis.bfSize);
        fread(&antet_fis.bfReserved1, sizeof(short int), 1, f);
        fprintf(f1, "%d\n", antet_fis.bfReserved1);
        fread(&antet_fis.bfReserved2, sizeof(short int), 1, f);
        fprintf(f1, "%d\n", antet_fis.bfReserved2);
        fread(&antet_fis.bfOffBits, sizeof(int), 1, f);
        fprintf(f1, "%d\n", antet_fis.bfOffBits);
        fread(&antet_img.biSize, sizeof(int), 1, f);
        fread(&antet_img.biWidth, sizeof(int), 1, f);
        fread(&antet_img.biHeight, sizeof(int), 1, f);
        fread(&antet_img.biPlanes, sizeof(short int), 1, f);
        fread(&antet_img.biBitCount, sizeof(short int), 1, f);
        fread(&antet_img.biCompression, sizeof(int), 1, f);
        fread(&antet_img.biSizeImage, sizeof(int), 1, f);
        fread(&antet_img.biXPelsPerMeter, sizeof(int), 1, f);
        fread(&antet_img.biYPelsPerMeter, sizeof(int), 1, f);
        fread(&antet_img.biClrUsed, sizeof(int), 1, f);
        fprintf(f1, "Colors used %d \n", antet_img.biClrUsed);
        fread(&antet_img.biClrImportant, sizeof(int), 1, f);

        NBPP = antet_img.biBitCount;
        if (NBPP != 8)
        {
            CString mes1(CString("Изображение не 8 bpp"));
            AfxMessageBox(mes1);
            return;
        }

        // Число цветов в палитре
        int nColors = antet_img.biClrUsed;
        if (nColors == 0)
            nColors = 256;
        // Чтение палитры
        pal = new PALETA[nColors];
        for (int i = 0; i < nColors; i++)
        {
            fread(&(pal[i].B), 1, 1, f);
            fread(&(pal[i].G), 1, 1, f);
            fread(&(pal[i].R), 1, 1, f);
            fread(&(pal[i].Z), 1, 1, f);
            fprintf(f1, "%02X %02X %02X\n", pal[i].R, pal[i].G, pal[i].B);
        }
        // Число байт для кодирования строки для 8 bpp

        /*CString mes3;
        mes3.Format(_T("%d"), antet_img.biWidth);
        AfxMessageBox(mes3);*/

        /*noct = ((antet_img.biWidth + 3) / 4) * 4;*/
        //noct = antet_img.biWidth + (4 - (antet_img.biWidth % 4)) * (antet_img.biWidth % 4 != 0);

        noct = antet_img.biWidth;
        if (antet_img.biWidth % 4 != 0) {
            noct += (4 - (antet_img.biWidth % 4));
        }

        /*CString mes2;
        mes2.Format(_T("%d"), noct);
        AfxMessageBox(mes2);*/


        // Место для изображения
        pim = new unsigned char[antet_img.biHeight * noct];
        // Чтение изображенияй
        fread(pim, noct, antet_img.biHeight, f);
        fclose(f);

        // Рисование изображения для 8 bpp
        p = pim + noct * (antet_img.biHeight - 1);
        fprintf(f1, "Цвета: \n");
        for (unsigned i = 0; i < antet_img.biHeight; i++)
        {
            for (unsigned j = 0; j < antet_img.biWidth; j++)
            {
                cul = p[j];
                //pDC->SetPixel(j + m_ptMouse.x, i + m_ptMouse.y, RGB(pal[cul].R, pal[cul].G, pal[cul].B));
                fprintf(f1, "%02X", cul);
            }
            fprintf(f1, "\n");
            p -= noct;
        }
        fclose(f1);
        m_imageLoaded = true;
    }
    else
    {
        // Рисование изображения для 8 bpp через 5 секунд

        p = pim + noct * (antet_img.biHeight - 1);
        for (unsigned i = 0; i < antet_img.biHeight; i++)
        {
            for (unsigned j = 0; j < antet_img.biWidth; j++) {
                cul = p[j];
                pDC->SetPixel(j + m_ptMouse.x, i + m_ptMouse.y, RGB(pal[cul].R, pal[cul].G, pal[cul].B));
            }
            p -= noct;
        }
    }
}


// Печать Clab4View


void Clab4View::OnFilePrintPreview()
{
#ifndef SHARED_HANDLERS
	AFXPrintPreview(this);
#endif
}

BOOL Clab4View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// подготовка по умолчанию
	return DoPreparePrinting(pInfo);
}

void Clab4View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: добавьте дополнительную инициализацию перед печатью
}

void Clab4View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: добавьте очистку после печати
}

void Clab4View::OnRButtonUp(UINT /* nFlags */, CPoint point)
{
	ClientToScreen(&point);
	OnContextMenu(this, point);
}

void Clab4View::OnContextMenu(CWnd* /* pWnd */, CPoint point)
{
#ifndef SHARED_HANDLERS
	theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
#endif
}


// Диагностика Clab4View

#ifdef _DEBUG
void Clab4View::AssertValid() const
{
	CView::AssertValid();
}

void Clab4View::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

Clab4Doc* Clab4View::GetDocument() const // встроена неотлаженная версия
{
	//ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(Clab4Doc)));
	return (Clab4Doc*)m_pDocument;
}
#endif //_DEBUG


// Обработчики сообщений Clab4View