Sunteți pe pagina 1din 6

Ministerul Educatiei al Republicii Moldova

Universitatea de Stat din Moldova


Facultatea de Matematica si Informatică

Darea de seama
Lucrare de laborator nr. 2
la „Grafica 2D”

Tema: “Prelucrarea BMP”

A efectuat:Cîrciumaru Ilie

grupa IA21

A verificat : G. Marin

Chişinău 2014
Condiția:
De citit imaginea cu extensia bmp si de a o afisa in in DialogBox utilizind Visual Studio. De implementat efectul
Drag & Drop cu mouse asupra imaginei date.
Imaginea data este pe 4 bits / px.

Codul sursă.

//convertirea valorilor hezacimale pe pozitii de grad(g) in decimal


int getDec(unsigned char *a, int g){
int aiT = *a>>4;
int aiL = (*a) & 0x0F;
int g1 = 1;
int i = 0;
if(!g) return aiT*16 + aiL;
for(;i<g;i++){
g1 *=16;
}
aiL *= g1;
aiT *= g1*16;
return aiT + aiL;
}

//coordonatele imaginei coltului stinga sus si dreapta jos


int x1 = 5, y1 = 5, x2 = 0, y2 = 0;

//diferenta intre coltul stinga sus a imaginei si pozitia lui mouse


int dx1, dy1;
bool clickFlag = false;

2
void Cl2Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника


int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
FILE *f = fopen("carpetmall16.bmp","rb");
if(f == NULL) return;
//bufer pentru date initiale
unsigned char b[200];

//aici se va citi fiecare culoarea


unsigned char c[4];
CString o;
//pastrarea paletei
COLORREF a[16];

int n;
int d,w,h; // d - diminsiunea, w - width, h - height
int i,j,k;

//54 - marimea standarda a antelului fisierului bmp


n = fread(b,1,54,f);

d = getDec(b + 10,0) + getDec(b + 11,2) + getDec(b + 12,4)+getDec(b + 13,6);


w = getDec(b + 18,0) + getDec(b + 19,2) + getDec(b + 20,4)+getDec(b + 21,6);
h = getDec(b + 22,0) + getDec(b + 23,2) + getDec(b + 24,4)+getDec(b + 25,6);

//citirea paletei
//16 - 16 culori
for(i=0;i<16;i++){
fread(c,1,4,f);
a[i] = RGB(c[2],c[1],c[0]);
}

//citirea si afisarea pe pixels


for(i=0;i<h;i++){
for(j=0;j<w;j++){
fread(c,1,1,f);
dc.SetPixel(j+x1,-i+h+y1,a[c[0]>>4]);
j++;
if(j==w)break;
dc.SetPixel(j+x1,-i+h+y1,a[c[0]&0x0F]);
}

3
//scaparea de octeti care sunt umplute cu 0, pentru complementarea liniei
//for(j=0;j<(int) ((float) w / 2 + 0.5) % 4;j++)
fread(c,1,1,f);
}
x2 = x1 + w;
y2 = y1 + h;
fclose(f);
CDialogEx::OnPaint();

}
}

void Cl2Dlg::OnMouseMove(UINT nFlags, CPoint point)


{

if(clickFlag){
x1 = point.x - dx1 ;
y1 = point.y - dy1 ;
Invalidate();
}

CDialogEx::OnMouseMove(nFlags, point);
}

void Cl2Dlg::OnLButtonDown(UINT nFlags, CPoint point)


{
if(point.x >= x1 && point.y >= y1 && point.x <= x2 && point.y <=y2){
clickFlag = true;
dx1 = point.x - x1 ;
dy1 = point.y - y1 ;

CDialogEx::OnLButtonDown(nFlags, point);
}

void Cl2Dlg::OnLButtonUp(UINT nFlags, CPoint point)


{
clickFlag = false;
CDialogEx::OnLButtonUp(nFlags, point);
}

4
Rezultat

5
Concluzie.
Am citit binar fisier bmp si l-am afisat pe pixel pe ecran. Dupa efectuarea lucrării foarte bine am învățat
strcutra fișierului, plus am aflat detalii amplasarii biților în memorie. De asemenea și am lucrat cu biți
utiliînd deplasările și măștile. Am implementat efectul Drag & Drop utiliznd evenimente generate de
lucrul cu mouse.

S-ar putea să vă placă și

  • Lab2 Grafica
    Lab2 Grafica
    Document10 pagini
    Lab2 Grafica
    Valeria Ţînţaru
    Încă nu există evaluări
  • ASDC4
    ASDC4
    Document9 pagini
    ASDC4
    Valeria Tintaru
    Încă nu există evaluări
  • Lab1 Grafica
    Lab1 Grafica
    Document5 pagini
    Lab1 Grafica
    Valeria Ţînţaru
    Încă nu există evaluări
  • ASDC1
    ASDC1
    Document17 pagini
    ASDC1
    Valeria Tintaru
    Încă nu există evaluări
  • Referat Etica Minciuna
    Referat Etica Minciuna
    Document11 pagini
    Referat Etica Minciuna
    Valeria Ţînţaru
    100% (1)
  • Lab 2
    Lab 2
    Document4 pagini
    Lab 2
    Valeria Ţînţaru
    Încă nu există evaluări
  • LFA3
    LFA3
    Document5 pagini
    LFA3
    Valeria Ţînţaru
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document8 pagini
    Lab 1
    Valeria Ţînţaru
    Încă nu există evaluări
  • Cnmo 2
    Cnmo 2
    Document19 pagini
    Cnmo 2
    Valeria Ţînţaru
    Încă nu există evaluări
  • Cnmo 1
    Cnmo 1
    Document26 pagini
    Cnmo 1
    Valeria Ţînţaru
    100% (1)
  • Lab5 ASS
    Lab5 ASS
    Document2 pagini
    Lab5 ASS
    Valeria Ţînţaru
    Încă nu există evaluări