Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
BojanG99 authored Feb 18, 2021
1 parent 71c214b commit 91916f1
Show file tree
Hide file tree
Showing 43 changed files with 23,500 additions and 0 deletions.
188 changes: 188 additions & 0 deletions poop_projekat/C++/BMPFormater.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
#include "BMPFormater.h"

#include<iostream>
#include<fstream>
Layer* BMPFormater::Ucitaj_Sliku(const char* ch, int prov) {
uint32_t pocetak_piksela, fleg;
int32_t sirina, visina;
uint16_t bpp, tip;
std::vector<std::vector<Pixel>> sloj;
std::ifstream file((char*)ch, std::ios::binary);
if (file) {//dohvatamo heder
file.read((char*)&tip, 2);
if (tip != 0x4D42) {
std::cout << "NEPOSTOJECI FORMAT\n";
return nullptr;
}
file.seekg(10);

file.read((char*)&pocetak_piksela, 4);
file.seekg(18);

file.read((char*)&sirina, 4);
file.read((char*)&visina, 4);
// std::cout << sirina << " " << visina << "\n";
file.seekg(28);

file.read((char*)&bpp, 2);
file.read((char*)&fleg, 4);
file.seekg(pocetak_piksela);
if (bpp == 24) {//ako je 24b format dohvatamo rgb

uint8_t r,g,b;
uint32_t pend;
int pending = 4 - (3 * sirina % 4);
if (pending == 4)pending = 0;

for (int j = 0; j < visina; j++) {
std::vector<Pixel> pom;
for (int i = 0; i < sirina ; i++) {
file.read((char*)&b, 1);
file.read((char*)&g, 1);
file.read((char*)&r, 1);


Pixel p1((int)r, (int)g, (int)b);
pom.push_back(p1);

}
file.read((char*)&pend, pending);
sloj.push_back(pom);
}


Layer* l = new Layer(sloj, visina, sirina, prov);
return l;
}
else { //ako je 32b format onda rgbalfa
uint8_t g,b,r,alf;
for (int j = 0; j < visina; j++) {
std::vector<Pixel> pom;
for (int i = 0; i < sirina ; i++) {
file.read((char*)&b, 1);
file.read((char*)&g, 1);
file.read((char*)&r, 1);
file.read((char*)&alf, 1);

Pixel p1(r, g, b,alf);
pom.push_back(p1);

}
sloj.push_back(pom);
}
Layer* l = new Layer(sloj, visina, sirina, prov);//pravimo novi sloj sa informacijama iz fajla
return l;
}
}
else { // fajl nije otvoren

std::cout << "LOSA PUTANJA DO FAJLA.STVORICE SE PRAZAN SLOJ"<< std::endl;
Layer* l = new Layer();
return l;
}
}

void BMPFormater::Sacuvaj_Sliku(const char*ch, std::vector<std::vector<Pixel>> l) {
std::ofstream file(ch, std::ios::binary);

if (file) {
int32_t sir = l[0].size();
int32_t vis = l.size();
uint8_t bit;
//setujemo heder
bit = 0x42;
file.write((char*)&bit, 1);
bit = 0x4d;
file.write((char*)&bit, 1);

int pend = (((3 * sir) % 4) == 0 )? 0 : (4 - ((3 * sir )% 4));
uint32_t vel = (vis * (3 * sir + pend));

uint32_t size = vel + 54;
file.write((char*)&size, 4);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
bit = 0x36;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
bit = 0x28;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&sir, 4);
file.write((char*)&vis, 4);
bit = 0x01;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
bit = 0x18;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
//velicina bitmape4

file.write((char*)&vel, 4);
bit = 0x13;
file.write((char*)&bit, 1);
bit = 0x0b;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);

bit = 0x13;
file.write((char*)&bit, 1);
bit = 0x0b;
file.write((char*)&bit, 1);
bit = 0x00;
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);
file.write((char*)&bit, 1);

bit = 0x00;
//smjestamo piksele bajt po bajt
for (auto a : l) {

for (auto pix:a)
{
int b = pix.Get_blue();
int r = pix.Get_red();
int g = pix.Get_green();
file.write((char*)&b, 1);
file.write((char*)&g, 1);
file.write((char*)&r, 1);

}
for (int i = 0; i < pend; i++)
{
file.write((char*)&bit, 1);
}
}
file.close();
}
else {

std::cout << "DESILA SE GRESKA\n";
return;
}

}
11 changes: 11 additions & 0 deletions poop_projekat/C++/BMPFormater.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#pragma once
#include"Layer.h"

class BMPFormater
{
public:
static Layer* Ucitaj_Sliku(const char* ch, int prov);
BMPFormater() {}
static void Sacuvaj_Sliku(const char*ch,std::vector<std::vector<Pixel>>l);
};

3 changes: 3 additions & 0 deletions poop_projekat/C++/BasicOperation.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#include "BasicOperation.h"


177 changes: 177 additions & 0 deletions poop_projekat/C++/BasicOperation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#pragma once
#include"Operation.h"
// sve klase su izvedene iz klase Operation i imaju virtuelne metode izvrsi, get_name i kopiju
class Sabiranje:public Operation
{
public:
Sabiranje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel**p)override {

(**p) += konst;
}

virtual const char* Get_name()const {
return "Sum";
}
virtual Sabiranje* kopija()override {
return new Sabiranje(konst);
}
};

class Oduzimanje :public Operation {
public:
Oduzimanje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p) -= konst;
}
virtual const char* Get_name()const {
return "Sub";
}
virtual Oduzimanje* kopija()override {
return new Oduzimanje(konst);
}
};

class Mnozenje :public Operation {
public:
Mnozenje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p)*= konst;
}
virtual const char* Get_name()const {
return "Mul";
}
virtual Mnozenje* kopija()override {
return new Mnozenje(konst);
}
};
class Dijeljenje :public Operation {
public:
Dijeljenje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p) /= konst;
}
virtual const char* Get_name()const {
return "Div";
}
virtual Dijeljenje* kopija()override {
return new Dijeljenje(konst);
}
};
class IOduzimanje :public Operation {
public:
IOduzimanje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p) - konst;
}
virtual const char* Get_name()const {
return "Isub";
}

virtual IOduzimanje* kopija()override {
return new IOduzimanje(konst);
}
};
class IDijeljenje :public Operation {
public:
IDijeljenje(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel **p)override {

(**p) / konst;
}
virtual const char* Get_name()const {
return "Idiv";
}
virtual IDijeljenje* kopija()override {
return new IDijeljenje(konst);
}
};

class Max :public Operation {
public:
Max(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

if ((**p).Get_red() < konst) { (**p).Set_red(konst); }
if ((**p).Get_green() < konst) { (**p).Set_green(konst); }
if ((**p).Get_blue() < konst) { (**p).Set_blue(konst); }
}
virtual const char* Get_name()const {
return "Max";
}
virtual Max* kopija()override {
return new Max(konst);
}
};

class Min :public Operation {
public:
Min(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

if ((**p).Get_red() > konst) { (**p).Set_red(konst); }
if ((**p).Get_green() > konst) { (**p).Set_green(konst); }
if ((**p).Get_blue() > konst) { (**p).Set_blue(konst); }
}
virtual const char* Get_name()const {
return "Min";
}
virtual Min* kopija()override {
return new Min(konst);
}
};

class Pow :public Operation {
public:
Pow(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p).Set_red(pow((**p).Get_red() ,konst));
(**p).Set_green(pow((**p).Get_green(),konst));
(**p).Set_blue(pow((**p).Get_blue(),konst));
}
virtual const char* Get_name()const {
return "Pow";
}
virtual Pow* kopija()override {
return new Pow(konst);
}
};

class Log :public Operation {
public:
Log(int konst) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p).Set_red(log((**p).Get_red())/log( konst));
(**p).Set_green(log((**p).Get_green()) / log(konst));
(**p).Set_blue(log((**p).Get_blue() )/ log(konst));
}
virtual const char* Get_name()const {
return "Log";
}
virtual Log* kopija()override {
return new Log(konst);
}
};

class Abs :public Operation {
public:
Abs(int konst=0) :Operation(konst) {}
virtual void izvrsi(Pixel** p)override {

(**p).Set_red(abs((**p).Get_red()));
(**p).Set_green(abs((**p).Get_green()));
(**p).Set_blue(abs((**p).Get_blue()));
}
virtual const char* Get_name()const {
return "Abs";
}
virtual Abs* kopija()override {
return new Abs(konst);
}
};
Loading

0 comments on commit 91916f1

Please sign in to comment.