consolidate all repos to one for archive
This commit is contained in:
2
projektna_naloga/compression/.gitignore
vendored
Normal file
2
projektna_naloga/compression/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.vscode
|
||||
build
|
334
projektna_naloga/compression/cameras.csv
Normal file
334
projektna_naloga/compression/cameras.csv
Normal file
@@ -0,0 +1,334 @@
|
||||
0,0,https://kamere.dars.si/kamere/Maribor/IP_30_L13.1_Dolga_vas.jpg
|
||||
1,0,https://www.drsc.si/kamere/kamslike/Lukovica/slike/Luk1_0001.jpg
|
||||
2,0,https://kamere.dars.si/kamere/msc2pics/Cam21_SPEED_VHOD.jpg
|
||||
2,1,https://kamere.dars.si/kamere/msc2pics/Cam22_SPEED_IZHOD.jpg
|
||||
3,0,https://kamere.dars.si/kamere/Sentvid_Jug/cam11.jpg
|
||||
4,0,https://kamere.dars.si/kamere/Vrhnika/Sinja_gorica_LJ.JPG
|
||||
5,0,https://kamere.dars.si/kamere/Kozina/Dilce_1.jpg
|
||||
5,1,https://kamere.dars.si/kamere/Kozina/Dilce_2.jpg
|
||||
6,0,https://kamere.dars.si/kamere/Kozina/Portal_P3_Studenec.jpg
|
||||
7,0,https://kamere.dars.si/kamere/Vrhnika/CP_Vrhnika_Panorama_izhod.JPG
|
||||
8,0,https://kamere.dars.si/kamere/Vrhnika/Verd_KP.JPG
|
||||
8,1,https://kamere.dars.si/kamere/Vrhnika/Verd_LJ.JPG
|
||||
9,0,https://kamere.dars.si/kamere/msc2pics/CP_Logatec_panorama1.jpg
|
||||
10,0,https://kamere.dars.si/kamere/Vrhnika/Stempetov_most_LJ.JPG
|
||||
11,0,https://kamere.dars.si/kamere/Kozina/Stempetov_most_LJ.jpg
|
||||
11,1,https://kamere.dars.si/kamere/Kozina/Stempetov_most_KP.jpg
|
||||
12,0,https://kamere.dars.si/kamere/msc2pics/Kam8_LOM_LJ.jpg
|
||||
12,1,https://kamere.dars.si/kamere/msc2pics/kam7_Lom_KP.jpg
|
||||
13,0,https://kamere.dars.si/kamere/msc2pics/Kam9_IVANJE_SELO_KP.jpg
|
||||
13,1,https://kamere.dars.si/kamere/msc2pics/Kam15_IVANJE_SELO_LJ.jpg
|
||||
14,0,https://kamere.dars.si/kamere/msc2pics/Portal%20Unec%20smer%20LJ.jpg
|
||||
14,1,https://kamere.dars.si/kamere/msc2pics/Portal%20Unec%20smer%20KP.jpg
|
||||
15,0,https://kamere.dars.si/kamere/msc2pics/Postojna_B_panorama_SD1.jpg
|
||||
15,1,https://kamere.dars.si/kamere/msc2pics/Postojna_B_panorama_SD2.jpg
|
||||
15,2,https://kamere.dars.si/kamere/msc2pics/Postojna_A_panorama_2.jpg
|
||||
16,0,https://kamere.dars.si/kamere/msc2pics/Postojna_A_panorama_1.jpg
|
||||
17,0,https://kamere.dars.si/kamere/msc2pics/CP%20Postojna%20B%20SD%20kamera%20Portal%20pred%20CP.jpg
|
||||
18,0,https://kamere.dars.si/kamere/Bazara/Ajdovscina_smer_KP.jpg
|
||||
19,0,https://kamere.dars.si/kamere/Bazara/Viadukt_Lijak_SD.jpg
|
||||
20,0,https://kamere.dars.si/kamere/Dane/Cebulovica_smer_KP.jpg
|
||||
20,1,https://kamere.dars.si/kamere/Dane/Cebulovica_smer_LJ.jpg
|
||||
21,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0778_km02_VN0778_01.jpg
|
||||
22,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0374_km11_6a_VN0374_13.jpg
|
||||
23,0,https://kamere.dars.si/kamere/Bazara/Viadukt_Selo.jpg
|
||||
24,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0774_km05_VN0774_01.jpg
|
||||
25,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0774_km5_4a_VN0774_06.jpg
|
||||
26,0,https://kamere.dars.si/kamere/Nanos/Bandera_KP.jpg
|
||||
27,0,https://kamere.dars.si/kamere/Nanos/Goli_vrh_KP.jpg
|
||||
27,1,https://kamere.dars.si/kamere/Nanos/Goli_vrh_LJ.jpg
|
||||
28,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0774_km4_3_VN0774_08.jpg
|
||||
29,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0774_km9_5_VN0774_10.jpg
|
||||
30,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0774_km8_4a_VN0774_09.jpg
|
||||
31,0,https://kamere.dars.si/kamere/snvprebrnice/H4_0780_km1_VN0780_01.jpg
|
||||
32,0,https://kamere.dars.si/kamere/Videz/Videz_18_KP.jpg
|
||||
32,1,https://kamere.dars.si/kamere/Videz/Videz_LJ.jpg
|
||||
33,0,https://kamere.dars.si/kamere/Dane/CP%20Dane%20Panorama%20izstop.jpg
|
||||
33,1,https://kamere.dars.si/kamere/Dane/CP%20Dane%20Panorama%20vstop.jpg
|
||||
34,0,https://kamere.dars.si/kamere/Dane/Sd_Tabor_Fernetici.jpg
|
||||
35,0,https://kamere.dars.si/kamere/obala/Sermin_H5_0388_2400m.jpg
|
||||
36,0,https://kamere.dars.si/kamere/obala/Bertoki_KP_H5_0236_500m.jpg
|
||||
36,1,https://kamere.dars.si/kamere/obala/Bertoki_KP_H5_0737_500m.jpg
|
||||
37,0,https://kamere.dars.si/kamere/Kozina/vn7_Izola.jpg
|
||||
38,0,https://kamere.dars.si/kamere/Kozina/vn11_Jagodje.jpg
|
||||
39,0,https://www.drsc.si/kamere/kamslike/Obrov/Obr1_0001.jpg
|
||||
40,0,http://www.drsc.si/kamere/KamSlike/Catez/slike/Cat1_0001.jpg
|
||||
41,0,https://kamere.dars.si/kamere/Golovec/K27_Sentjakob_MB_8.jpg
|
||||
41,1,https://kamere.dars.si/kamere/Golovec/K28_Sentjakob_LJ_7.jpg
|
||||
42,0,https://kamere.dars.si/kamere/Golovec/CP_Kompolje_ABC_LJ_panorama.JPG
|
||||
42,1,https://kamere.dars.si/kamere/Golovec/CP_Kompolje_ABC_MB_panorama.JPG
|
||||
43,0,https://www.drsc.si/kamere/KamSlike/VrhnikaAC/slike/Vac1_0001.jpg
|
||||
43,1,https://www.drsc.si/kamere/KamSlike/VrhnikaAC2/slike/Vac2_0001.jpg
|
||||
44,0,https://www.drsc.si/kamere/KamSlike/BrezovicaAC/slike/Bac1_0001.jpg
|
||||
44,1,https://www.drsc.si/kamere/KamSlike/BrezovicaAC2/slike/Bac2_0001.jpg
|
||||
45,0,http://www.drsc.si/kamere/KamSlike/Dragomer/slike/Dra1_0001.jpg
|
||||
46,0,https://kamere.dars.si/kamere/Golovec/K17_Blagovica_1.jpg
|
||||
47,0,https://kamere.dars.si/kamere/Vransko/K02_Panorama2.jpg
|
||||
48,0,https://kamere.dars.si/kamere/Vransko/cam1.jpg
|
||||
49,0,https://kamere.dars.si/kamere/Baza_Konjice/Zima_smer_MB.jpg
|
||||
50,0,https://kamere.dars.si/kamere/Baza_Konjice/Dramlje_SD.jpg
|
||||
51,0,https://kamere.dars.si/kamere/Tepanje/Slatina_2.jpg
|
||||
51,1,https://kamere.dars.si/kamere/Tepanje/Slatina_1.jpg
|
||||
52,0,https://kamere.dars.si/kamere/Tepanje/Škedenj_2.jpg
|
||||
52,1,https://kamere.dars.si/kamere/Tepanje/Škedenj_1.jpg
|
||||
53,0,https://kamere.dars.si/kamere/Tepanje/CP_Tepanje_jug.jpg
|
||||
53,1,https://kamere.dars.si/kamere/Tepanje/CP_Tepanje_sever.jpg
|
||||
54,0,https://kamere.dars.si/kamere/Baza_Konjice/Fram.jpg
|
||||
55,0,https://kamere.dars.si/kamere/Baza_Konjice/Vrhole_LJ.jpg
|
||||
55,1,https://kamere.dars.si/kamere/Baza_Konjice/Vrhole_MB.jpg
|
||||
56,0,https://kamere.dars.si/kamere/Baza_Konjice/Sl_Bistrica_SD.jpg
|
||||
57,0,https://kamere.dars.si/kamere/Maribor/IP_17_L05.1_Slivnica2.jpg
|
||||
58,0,https://kamere.dars.si/kamere/Maribor/IP_18_L06.1_Dragocova.jpg
|
||||
58,1,https://kamere.dars.si/kamere/Maribor/IP_19_L06.2_Dragocova.jpg
|
||||
59,0,https://kamere.dars.si/kamere/Baza_Konjice/Devina_MB.jpg
|
||||
59,1,https://kamere.dars.si/kamere/Baza_Konjice/Devina_LJ.jpg
|
||||
60,0,https://kamere.dars.si/kamere/Prepolje/prepolje.jpg
|
||||
60,1,https://kamere.dars.si/kamere/Tepanje/K02_smer_Ptuj.jpg
|
||||
61,0,https://kamere.dars.si/kamere/Maribor/IP_12_L02.1_D_Polje.jpg
|
||||
62,0,https://kamere.dars.si/kamere/Maribor/IP_13_L03.1_Hajdina.jpg
|
||||
63,0,https://kamere.dars.si/kamere/Maribor/IP_11_L01.1_Slivnica.jpg
|
||||
64,0,https://kamere.dars.si/kamere/Maribor/IP_15_L04.1_Ptuj.jpg
|
||||
64,1,https://kamere.dars.si/kamere/Maribor/IP_16_L04.2_Ptuj.jpg
|
||||
65,0,https://kamere.dars.si/kamere/Gruskovje/Podlehnik%20L04_4.jpg
|
||||
66,0,https://kamere.dars.si/kamere/Maribor/LOG1.5.jpg
|
||||
67,0,https://kamere.dars.si/kamere/Gruskovje/Zakl%20L04_32.jpg
|
||||
68,0,https://kamere.dars.si/kamere/Baza_Konjice/Gramoznica_MB.jpg
|
||||
68,1,https://kamere.dars.si/kamere/Baza_Konjice/Gramoznica_LJ.jpg
|
||||
69,0,https://kamere.dars.si/kamere/Baza_Konjice/Ptujska_SD.jpg
|
||||
70,0,https://kamere.dars.si/kamere/Pesnica/%C5%A0entilj_1.jpg
|
||||
70,1,https://kamere.dars.si/kamere/Pesnica/Šentilj_2.jpg
|
||||
71,0,https://kamere.dars.si/kamere/Pesnica/Rondo_Pesnica.jpg
|
||||
72,0,https://kamere.dars.si/kamere/Pesnica/Kresnice_smer_Šentilj.jpg
|
||||
72,1,https://kamere.dars.si/kamere/Pesnica/Kresnice_smer_MB.jpg
|
||||
73,0,https://kamere.dars.si/kamere/Pesnica/CP_Pesnica_JUG.jpg
|
||||
73,1,https://kamere.dars.si/kamere/Pesnica/CP_Pesnica_Panorama_iz_A.jpg
|
||||
74,0,https://kamere.dars.si/kamere/Pesnica/CP_Pesnica_Panorama_iz_MB.jpg
|
||||
74,1,https://kamere.dars.si/kamere/Pesnica/CP_Pesnica_sever.jpg
|
||||
75,0,https://kamere.dars.si/kamere/Pesnica/Pesnica.jpg
|
||||
76,0,https://www.drsc.si/kamere/kamslike/Vic/Vic1_0001.jpg
|
||||
77,0,https://www.drsc.si/kamere/kamslike/Kope/Kop1_0001.jpg
|
||||
78,0,https://www.drsc.si/kamere/kamslike/Pragersko/Pra1_0001.jpg
|
||||
79,0,https://kamere.dars.si/kamere/Dragotinci/Dragotinci_Panorama_MB_Pince.jpg
|
||||
79,1,https://kamere.dars.si/kamere/Dragotinci/Dragotinci_Panorama_Pince_MB.jpg
|
||||
80,0,https://www.drsc.si/kamere/kamslike/Lazaret/slike/Laz1_0001.jpg
|
||||
81,0,https://kamere.dars.si/kamere/Cenkova/cenkova.jpg
|
||||
82,0,https://kamere.dars.si/kamere/Mocna/Mocna_MS.jpg
|
||||
83,0,https://kamere.dars.si/kamere/Maribor/IP_20_L07.1_Pernica.jpg
|
||||
84,0,https://kamere.dars.si/kamere/Maribor/IP_21_L08.1_Senarska.jpg
|
||||
85,0,https://kamere.dars.si/kamere/Maribor/IP_22_L08.2_Senarska.jpg
|
||||
86,0,https://kamere.dars.si/kamere/Maribor/IP_24_L09.2_Cerkvenjak.jpg
|
||||
87,0,https://kamere.dars.si/kamere/Maribor/IP_26_L10.1_Grabonos.jpg
|
||||
88,0,https://kamere.dars.si/kamere/Maribor/IP_27_L11.1_Mura.jpg
|
||||
89,0,https://kamere.dars.si/kamere/Maribor/IP_29_L12.1_Dolinsko.jpg
|
||||
90,0,https://kamere.dars.si/kamere/Maribor/IP_31_L14.1_Lendava.jpg
|
||||
91,0,https://kamere.dars.si/kamere/Maribor/IP_33_L15.1_Trimlini.jpg
|
||||
92,0,https://kamere.dars.si/kamere/Maribor/IP_34_L16.1_Pince.jpg
|
||||
93,0,https://kamere.dars.si/kamere/Maribor/Zapora_Murska_Sobota.jpg
|
||||
94,0,https://www.drsc.si/kamere/kamslike/Lendava/slike/Len1_0001.jpg
|
||||
95,0,https://www.drsc.si/kamere/kamslike/Sredisce/slike/Sre1_0001.jpg
|
||||
96,0,https://www.drsc.si/kamere/KamSlike/Ucak/slike/Uck1_0001.jpg
|
||||
97,0,https://www.drsc.si/kamere/kamslike/Marno/slike/Mar1_0001.jpg
|
||||
98,0,https://www.drsc.si/kamere/kamslike/Sentrupert/slike/Str1_0001.jpg
|
||||
99,0,https://www.drsc.si/kamere/kamslike/Kresnice/slike/Kre1_0001.jpg
|
||||
100,0,https://www.drsc.si/kamere/KamSlike/Trbovlje/slike/Trb1_0001.jpg
|
||||
101,0,https://www.drsc.si/kamere/KamSlike/Mislinja/slike/Mis1_0001.jpg
|
||||
102,0,https://www.drsc.si/kamere/KamSlike/Radelj/slike/RMP1_0001.jpg
|
||||
103,0,https://www.drsc.si/kamere/KamSlike/Poljana/slike/Pol1_0001.jpg
|
||||
104,0,https://www.drsc.si/kamere/KamSlike/Sturm/slike/Stm1_0001.jpg
|
||||
105,0,https://www.drsc.si/kamere/KamSlike/Crna/slike/Crk1_0001.jpg
|
||||
106,0,https://www.drsc.si/kamere/kamslike/Radlje/Rad1_0001.jpg
|
||||
107,0,https://www.drsc.si/kamere/kamslike/Planina/Pls1_0001.jpg
|
||||
108,0,https://www.drsc.si/kamere/KamSlike/RazdrtoGSM/slike/Raz1_0001.jpg
|
||||
109,0,https://www.drsc.si/kamere/kamSlike/Kobarid/slike/Kob1_0001.jpg
|
||||
110,0,https://www.drsc.si/kamere/kamslike/PetrovoBrdo/slike/Pbr1_0001.jpg
|
||||
111,0,https://www.drsc.si/kamere/kamslike/Ucja/slike/Ucj1_0001.jpg
|
||||
112,0,https://www.drsc.si/kamere/KamSlike/RoznaDolina/slike/Rdl1_0001.jpg
|
||||
113,0,https://www.drsc.si/kamere/KamSlike/Neblo/slike/Neb1_0001.jpg
|
||||
114,0,https://www.drsc.si/kamere/kamslike/Robic/slike/Rob1_0001.jpg
|
||||
115,0,https://www.drsc.si/kamere/kamslike/Lipica/slike/Lip1_0001.jpg
|
||||
116,0,https://www.drsc.si/kamere/KamSlike/Elbl/slike/Elb1_0001.jpg
|
||||
116,1,https://www.drsc.si/kamere/KamSlike/Elbl2/slike/Elb2_0001.jpg
|
||||
117,0,https://www.drsc.si/kamere/KamSlike/Vrhnika/slike/Vrh1_0001.jpg
|
||||
118,0,https://www.drsc.si/kamere/KamSlike/Brezovica/slike/Bre1_0001.jpg
|
||||
118,1,https://www.drsc.si/kamere/KamSlike/Brezovica2/slike/Bre2_0001.jpg
|
||||
118,2,https://www.drsc.si/kamere/KamSlike/BrezovicaNG/slike/Bng1_0001.jpg
|
||||
119,0,https://www.drsc.si/kamere/KamSlike/Divaca/slike/Div2_0001.jpg
|
||||
120,0,https://www.drsc.si/kamere/KamSlike/VrhnikaMan1/slike/Vrm1_0001.jpg
|
||||
120,1,https://www.drsc.si/kamere/KamSlike/VrhnikaMan2/slike/Vrm2_0001.jpg
|
||||
121,0,https://www.drsc.si/kamere/kamslike/col/slike/Col1_0001.jpg
|
||||
122,0,https://www.drsc.si/kamere/kamslike/Lomanose/slike/Lom1_0001.jpg
|
||||
123,0,https://www.drsc.si/kamere/KamSlike/Hodos/slike/Hod1_0001.jpg
|
||||
124,0,https://www.drsc.si/kamere/kamslike/Gederovci/slike/Ged1_0001.jpg
|
||||
125,0,https://www.drsc.si/kamere/KamSlike/Sentilj/slike/Sen1_0001.jpg
|
||||
126,0,https://www.drsc.si/kamere/kamslike/Kuzma/slike/Kuz1_0001.jpg
|
||||
127,0,https://www.drsc.si/kamere/KamSlike/Prosenjakovci/slike/Pro1_0001.jpg
|
||||
128,0,https://www.drsc.si/kamere/KamSlike/Cepinci/slike/Cep1_0001.jpg
|
||||
129,0,https://www.drsc.si/kamere/kamslike/Kobilje/slike/Kob1_0001.jpg
|
||||
130,0,https://www.drsc.si/kamere/KamSlike/Ravbarkomanda/slike/Rav1_0001.jpg
|
||||
131,0,https://www.drsc.si/kamere/KamSlike/KapelskiVrh/slike/Kap1_0001.jpg
|
||||
132,0,https://www.drsc.si/kamere/KamSlike/Mackovci/slike/Mac1_0001.jpg
|
||||
133,0,http://www.drsc.si/kamere/KamSlike/Logatec/slike/Lgt1_0001.jpg
|
||||
134,0,https://www.drsc.si/kamere/kamslike/SpodnjeStranice/Sst1_0001.jpg
|
||||
135,0,https://www.drsc.si/kamere/KamSlike/Podplat/slike/Pdp1_0001.jpg
|
||||
136,0,https://www.drsc.si/kamere/kamslike/Predel/slike/Pre1_0001.jpg
|
||||
137,0,https://www.drsc.si/kamere/KamSlike/Godovic/slike/God1_0001.jpg
|
||||
138,0,https://www.drsc.si/kamere/KamSlike/Panovec/slike/Pan1_0001.jpg
|
||||
139,0,https://www.drsc.si/kamere/KamSlike/Pivka/slike/Piv1_0001.jpg
|
||||
140,0,https://www.drsc.si/kamere/kamslike/Starod/slike/Std1_0001.jpg
|
||||
141,0,https://www.drsc.si/kamere/KamSlike/PostojnaCenter/slike/Ptc1_0001.jpg
|
||||
141,1,https://www.drsc.si/kamere/KamSlike/PostojnaAC/slike/PAC1_0001.jpg
|
||||
141,2,https://www.drsc.si/kamere/KamSlike/PostojnaRazdrto/slike/Por1_0001.jpg
|
||||
142,0,http://www.drsc.si/kamere/KamSlike/PostojnaAC2/slike/PAC2_0001.jpg
|
||||
143,0,https://www.drsc.si/kamere/kamslike/Pecica/Pec1_0001.jpg
|
||||
144,0,https://www.drsc.si/kamere/KamSlike/CrniKal/slike/Crn1_0001.jpg
|
||||
145,0,https://www.drsc.si/kamere/kamslike/KrvaviPotok/slike/Krv1_0001.jpg
|
||||
146,0,https://www.drsc.si/kamere/KamSlike/Rogaska/Slike/Rog1_0001.jpg
|
||||
147,0,https://www.drsc.si/kamere/KamSlike/Podcetrtek/slike/Pdc1_0001.jpg
|
||||
148,0,https://www.drsc.si/kamere/KamSlike/Valeta/slike/Val1_0001.jpg
|
||||
149,0,https://www.drsc.si/kamere/kamslike/Trate/slike/Tra1_0001.jpg
|
||||
150,0,https://kamere.dars.si/kamere/hrusica/CP_Hrusica_IPCAM.jpg
|
||||
150,1,https://kamere.dars.si/kamere/hrusica/CP_Hrusica_IPCAM2.jpg
|
||||
150,2,https://kamere.dars.si/kamere/Hrusica/CP_Hrusica_Vrtljiva_kamera.jpg
|
||||
151,0,https://kamere.dars.si/kamere/hrusica/IP3%20Panorama%20Hrusica.jpg
|
||||
151,1,https://kamere.dars.si/kamere/Hrusica/VN_0601_02.jpg
|
||||
152,0,https://kamere.dars.si/kamere/Hrusica/VN_0602_04.jpg
|
||||
152,1,https://kamere.dars.si/kamere/Hrusica/VN_0602_05.jpg
|
||||
152,2,https://kamere.dars.si/kamere/Hrusica/VN_0601_3A.jpg
|
||||
153,0,https://kamere.dars.si/kamere/Hrusica/Lipce_smer_Ljubljana.jpg
|
||||
153,1,https://kamere.dars.si/kamere/Hrusica/Lipce_smer_Jesenice.jpg
|
||||
154,0,http://www.drsc.si/kamere/KamSlike/Koper2/slike/Kpc2_0001.jpg
|
||||
154,1,http://www.drsc.si/kamere/KamSlike/Koper1/slike/Kpc1_0001.jpg
|
||||
155,0,https://kamere.dars.si/kamere/Hrusica/Breg_smer_Jesenice.jpg
|
||||
156,0,https://kamere.dars.si/kamere/Hrusica/Vrba_smer_Ljubljana.jpg
|
||||
157,0,https://kamere.dars.si/kamere/Hrusica/Brezje_smer_Jesenice.jpg
|
||||
157,1,https://kamere.dars.si/kamere/Hrusica/Brezje_smer_Ljubljana.jpg
|
||||
158,0,https://kamere.dars.si/kamere/Torovo/Podtabor_JE.jpg
|
||||
158,1,https://kamere.dars.si/kamere/Torovo/Podtabor_LJ.jpg
|
||||
158,2,https://kamere.dars.si/kamere/Torovo/Podtabor_konec_JE.jpg
|
||||
158,3,https://kamere.dars.si/kamere/Torovo/Podtabor_konec_LJ.jpg
|
||||
159,0,https://kamere.dars.si/kamere/Torovo/Voklo_LJ.jpg
|
||||
160,0,https://kamere.dars.si/kamere/Hrusica/Nadvoz_Strahinj_2.jpg
|
||||
161,0,https://kamere.dars.si/kamere/Hrusica/Brezje_Vrtljiva.jpg
|
||||
162,0,https://kamere.dars.si/kamere/Torovo/SD_Torovo_KR.jpg
|
||||
162,1,https://kamere.dars.si/kamere/Torovo/SD_Torovo_LJ.jpg
|
||||
163,0,https://kamere.dars.si/kamere/ljubljana/Kam19_Sentvid.jpg
|
||||
163,1,https://kamere.dars.si/kamere/Sentvid_Sever/cam3.jpg
|
||||
163,2,https://kamere.dars.si/kamere/Sentvid_Sever/cam2.jpg
|
||||
164,0,https://kamere.dars.si/kamere/Sentvid_Sever/cam0.jpg
|
||||
164,1,https://kamere.dars.si/kamere/ljubljana/K16_Povodje.jpg
|
||||
165,0,https://kamere.dars.si/kamere/Sentvid_Sever/cam1.jpg
|
||||
166,0,https://kamere.dars.si/kamere/Sentvid_Jug/cam1.jpg
|
||||
166,1,https://kamere.dars.si/kamere/Sentvid_Jug/cam2.jpg
|
||||
166,2,https://kamere.dars.si/kamere/Sentvid_Jug/cam3.jpg
|
||||
166,3,https://kamere.dars.si/kamere/Sentvid_Jug/cam4.jpg
|
||||
167,0,https://www.drsc.si/kamere/KamSlike/Podvin/slike/Pod1_0001.jpg
|
||||
168,0,https://www.drsc.si/kamere/kamslike/Dovje/slike/Dov1_0001.jpg
|
||||
169,0,https://www.drsc.si/kamere/KamSlike/Lesce/slike/Les1_0001.jpg
|
||||
170,0,http://www.drsc.si/kamere/kamslike/Bled/slike/Bld1_0001.jpg
|
||||
171,0,https://www.drsc.si/kamere/kamslike/Jesenice/Slike/Jes1_0001.jpg
|
||||
172,0,https://www.drsc.si/kamere/kamslike/Ljubelj/slike/Lju1_0001.jpg
|
||||
173,0,https://www.drsc.si/kamere/kamslike/Bohinjska/slike/Boh1_0001.jpg
|
||||
174,0,https://www.drsc.si/kamere/kamslike/Jezersko/slike/Jez1_0001.jpg
|
||||
175,0,https://www.drsc.si/kamere/kamslike/Ratece/slike/Rat1_0001.jpg
|
||||
175,1,https://www.drsc.si/kamere/kamslike/Ratece2/slike/Rat2_0001.jpg
|
||||
176,0,https://www.drsc.si/kamere/kamslike/LjubeljT/slike/Ljt1_0001.jpg
|
||||
177,0,https://www.drsc.si/kamere/KamSlike/JezerskoMP/slike/JMP1_0001.jpg
|
||||
178,0,https://www.drsc.si/kamere/KamSlike/Korensko/slike/Kor1_0001.jpg
|
||||
179,0,https://www.drsc.si/kamere/KamSlike/Kranj/slike/Kra1_0001.jpg
|
||||
180,0,https://www.drsc.si/kamere/KamSlike/Polica2/slike/Pol2_0001.jpg
|
||||
180,1,https://www.drsc.si/kamere/KamSlike/Polica1/slike/Pol1_0001.jpg
|
||||
181,0,http://www.drsc.si/kamere/KamSlike/Labore/slike/Lab1_0001.jpg
|
||||
182,0,https://www.drsc.si/kamere/KamSlike/Vodice/slike/Vod1_0001.jpg
|
||||
183,0,https://www.drsc.si/kamere/KamSlike/Moste/slike/Mos1_0001.jpg
|
||||
184,0,https://www.drsc.si/kamere/KamSlike/Zelodnik/slike/Zel1_0001.jpg
|
||||
185,0,https://www.drsc.si/kamere/KamSlike/Krtina1/slike/Krt1_0001.jpg
|
||||
186,0,http://www.drsc.si/kamere/KamSlike/Vir/slike/Vir1_0001.jpg
|
||||
187,0,http://www.drsc.si/kamere/KamSlike/Krtina2/slike/Krt2_0001.jpg
|
||||
188,0,http://www.drsc.si/kamere/KamSlike/Fram/Slike/Fra1_0001.jpg
|
||||
189,0,http://www.drsc.si/kamere/KamSlike/Crnivec/slike/Crn1_0001.jpg
|
||||
190,0,http://www.drsc.si/kamere/KamSlike/Trzin/slike/Trz1_0001.jpg
|
||||
191,0,http://www.drsc.si/kamere/KamSlike/TrzinIOC/slike/Tri1_0001.jpg
|
||||
192,0,https://www.drsc.si/kamere/KamSlike/MaliHrib/slike/Tuh1_0001.jpg
|
||||
193,0,https://www.drsc.si/kamere/KamSlike/Medvode/slike/Med1_0001.jpg
|
||||
194,0,https://www.drsc.si/kamere/kamslike/Trebija/slike/Tre1_0001.jpg
|
||||
195,0,https://www.drsc.si/kamere/KamSlike/Travnik/slike/Trv1_0001.jpg
|
||||
196,0,http://www.drsc.si/kamere/kamslike/Mangart/slike/Mgr1_0001.jpg
|
||||
198,0,https://kamere.dars.si/kamere/Debeli_hrib/K10_Mali_vrh_smer_NM.jpg
|
||||
199,0,https://kamere.dars.si/kamere/Golovec/K18_Reber_LJ_3.jpg
|
||||
199,1,https://kamere.dars.si/kamere/Golovec/K14_Reber_NM_4.jpg
|
||||
200,0,https://kamere.dars.si/kamere/Dob/K31_V_gora_v_NM.jpg
|
||||
200,1,https://kamere.dars.si/kamere/Dob/K28_V_gora_smer_NM.jpg
|
||||
201,0,https://kamere.dars.si/kamere/Dob/K30_V_gora_iz_LJ.jpg
|
||||
201,1,https://kamere.dars.si/kamere/Dob/K29_V_gora_iz_LJ.jpg
|
||||
202,0,https://kamere.dars.si/kamere/Dob/CP_Dob_K17_PANORAMA_NM.jpg
|
||||
202,1,https://kamere.dars.si/kamere/Dob/CP_Dob_K19_PANORAMA_LJ.jpg
|
||||
202,2,https://kamere.dars.si/kamere/Dragomelj/Dob_Plato_LJ_2.jpg
|
||||
203,0,https://kamere.dars.si/kamere/Dob/K27_PLJUSKA_NM.jpg
|
||||
203,1,https://kamere.dars.si/kamere/Dob/K26_PLJUSKA_LJ.jpg
|
||||
204,0,https://kamere.dars.si/kamere/Novo_Mesto/Hrastje_NM.jpg
|
||||
204,1,https://kamere.dars.si/kamere/Novo_Mesto/Hrastje_LJ.jpg
|
||||
205,0,https://kamere.dars.si/kamere/Novo_mesto/Cam8_SD2_Karteljevo_LJ.jpg
|
||||
205,1,https://kamere.dars.si/kamere/Novo_mesto/Cam4_SD1_Karteljevo_NM.jpg
|
||||
206,0,https://kamere.dars.si/kamere/Novo_mesto/POC_Starine_Smer_Ljubljana.jpg
|
||||
206,1,https://kamere.dars.si/kamere/Novo_mesto/POC_Starine_smer_Obrezje.jpg
|
||||
207,0,https://kamere.dars.si/kamere/Novo_mesto/Viadukt_Dobovo_Smer_Ljubljana.jpg
|
||||
207,1,https://kamere.dars.si/kamere/Novo_mesto/Viadukt_Dobovo_smer_Obrezje.jpg
|
||||
208,0,https://kamere.dars.si/kamere/Novo_mesto/Izvoz_Kronovo_Smer_Obrezje.jpg
|
||||
209,0,https://kamere.dars.si/kamere/Drnovo/K8_Dobruska_vas_smer_Zg.jpg
|
||||
209,1,https://kamere.dars.si/kamere/Drnovo/K9_Dobruska_vas_smer_Nm.jpg
|
||||
210,0,https://kamere.dars.si/kamere/Debeli_hrib/K21_V_debeli_hrib_iz_LJ.jpg
|
||||
210,1,https://kamere.dars.si/kamere/Debeli_hrib/K5_Debeli_hrib_smer_NM.jpg
|
||||
210,2,https://kamere.dars.si/kamere/Debeli_hrib/K15_Debeli_hrib_smer_LJ.jpg
|
||||
211,0,https://kamere.dars.si/kamere/Novo_mesto/Obrezje.jpg
|
||||
212,0,https://kamere.dars.si/kamere/Drnovo/K36_Drnovo_LJ_Brezice.jpg
|
||||
212,1,https://kamere.dars.si/kamere/Drnovo/K37_Drnovo_Brezice_LJ.jpg
|
||||
213,0,https://kamere.dars.si/kamere/Drnovo/K7_Krska_vas_smer_Zg.jpg
|
||||
213,1,https://kamere.dars.si/kamere/Drnovo/K6_Krska_vas_smer_Nm.jpg
|
||||
214,0,https://kamere.dars.si/kamere/Drnovo/K5_Gric.jpg
|
||||
215,0,https://kamere.dars.si/kamere/Drnovo/K1_Mokrice_smer_Nm.jpg
|
||||
215,1,https://kamere.dars.si/kamere/Drnovo/K2_Mokrice_smer_ZG.jpg
|
||||
216,0,https://kamere.dars.si/kamere/Drnovo/K3_Prilipe_smer_Nm.jpg
|
||||
216,1,https://kamere.dars.si/kamere/Drnovo/K4_Prilipe_smer_Zg.jpg
|
||||
217,0,https://www.drsc.si/kamere/KamSlike/Krsko2/slike/Krs2_0001.jpg
|
||||
218,0,http://www.drsc.si/kamere/KamSlike/Bostanj/slike/Bos1_0001.jpg
|
||||
219,0,https://www.drsc.si/kamere/KamSlike/Fara/slike/Far1_0001.jpg
|
||||
220,0,https://www.drsc.si/kamere/KamSlike/Trebnje/Slike/Tre1_0001.jpg
|
||||
221,0,https://www.drsc.si/kamere/KamSlike/MaleRebrce/slike/Mlr1_0001.jpg
|
||||
222,0,https://www.drsc.si/kamere/KamSlike/Rigonce/slike/Rig1_0001.jpg
|
||||
222,1,https://www.drsc.si/kamere/KamSlike/Rigonce2/slike/Rig2_0001.jpg
|
||||
223,0,https://www.drsc.si/kamere/KamSlike/SlovenskaVas1/slike/Slv1_0001.jpg
|
||||
224,0,https://www.drsc.si/kamere/KamSlike/SlovenskaVas2/slike/Slv2_0001.jpg
|
||||
225,0,http://www.drsc.si/kamere/KamSlike/Dobova/slike/Dob1_0001.jpg
|
||||
226,0,https://www.drsc.si/kamere/kamslike/Poklek/Pok1_0001.jpg
|
||||
227,0,https://www.drsc.si/kamere/KamSlike/Vahta/slike/Vah1_0001.jpg
|
||||
228,0,https://www.drsc.si/kamere/kamslike/Metlika/slike/Met1_0001.jpg
|
||||
229,0,https://www.drsc.si/kamere/kamslike/Dragatus/slike/Dra1_0001.jpg
|
||||
230,0,https://www.drsc.si/kamere/KamSlike/Bizeljsko/slike/Biz1_0001.jpg
|
||||
231,0,https://kamere.dars.si/kamere/Golovec/K24_Rudnik_SD_1.jpg
|
||||
231,1,https://kamere.dars.si/kamere/Golovec/K16_Malence_z_Barja.jpg
|
||||
232,0,https://kamere.dars.si/kamere/ljubljana/K14_Center_smer_Kozarje.jpg
|
||||
232,1,https://kamere.dars.si/kamere/ljubljana/K04_Center_smer_Rudnik.jpg
|
||||
233,0,https://kamere.dars.si/kamere/ljubljana/K07_Izanka_smer_Kozarje.jpg
|
||||
234,0,https://kamere.dars.si/kamere/Golovec/K11_Zadobrova_Domzale_10.jpg
|
||||
234,1,https://kamere.dars.si/kamere/Golovec/K12_Zadobrova_Sneberje_6.jpg
|
||||
234,2,https://kamere.dars.si/kamere/Golovec/K15_Zadobrova_Zaloska.jpg
|
||||
235,0,https://kamere.dars.si/kamere/Golovec/K13_Zadobrova_Letaliska_5.jpg
|
||||
236,0,https://kamere.dars.si/kamere/Sentvid_Jug/cam5.jpg
|
||||
236,1,https://kamere.dars.si/kamere/Sentvid_Jug/cam6.jpg
|
||||
236,2,https://kamere.dars.si/kamere/Sentvid_Jug/cam8.jpg
|
||||
237,0,https://kamere.dars.si/kamere/Golovec/Strmec_Bizovik.jpg
|
||||
238,0,https://kamere.dars.si/kamere/ljubljana/K03_Kozarje_drog.jpg
|
||||
238,1,https://kamere.dars.si/kamere/Sentvid_Jug/cam9.jpg
|
||||
238,2,https://kamere.dars.si/kamere/Sentvid_Jug/cam10.jpg
|
||||
239,0,https://kamere.dars.si/kamere/Sentvid_Jug/cam7.jpg
|
||||
240,0,https://kamere.dars.si/kamere/Sentvid_Jug/cam13.jpg
|
||||
240,1,https://kamere.dars.si/kamere/Sentvid_Jug/cam12.jpg
|
||||
241,0,https://kamere.dars.si/kamere/Golovec/K19_Rondo_Tomacevo_SD_31.jpg
|
||||
242,0,https://www.drsc.si/kamere/KamSlike/Skofljica/slike/Sko1_0001.jpg
|
||||
243,0,https://www.drsc.si/kamere/kamslike/GPPoljane/slike/Gpp1_0001.jpg
|
||||
244,0,https://www.drsc.si/kamere/kamslike/IgaVas/slike/Iga1_0001.jpg
|
||||
245,0,https://www.drsc.si/kamere/kamslike/Izanka/slike/Iza1_0001.jpg
|
||||
246,0,https://www.drsc.si/kamere/KamSlike/Rakitna/slike/Rak1_0001.jpg
|
||||
247,0,http://www.drsc.si/kamere/KamSlike/Skofljica2/slike/Sko2_0001.jpg
|
||||
248,0,http://www.drsc.si/kamere/KamSlike/Lavrica/slike/Lav1_0001.jpg
|
||||
249,0,https://www.drsc.si/kamere/KamSlike/Miklavz/slike/Mik1_0001.jpg
|
|
26
projektna_naloga/compression/dec.cpp
Normal file
26
projektna_naloga/compression/dec.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "decompressor.h"
|
||||
#include "stb.h"
|
||||
|
||||
void decompress(const char *filepath, const char *savepath)
|
||||
{
|
||||
Decompressor dec;
|
||||
|
||||
dec.reader.buffer.load_from_file(filepath);
|
||||
|
||||
int width, hight;
|
||||
std::vector<unsigned char> ret = dec.decompress(width, hight);
|
||||
|
||||
stb_w(savepath, hight, width, 1, ret.data());
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
if (argc != 2)
|
||||
{
|
||||
printf("Usage: %s <filepath>\n", argv[0]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
decompress(argv[1], "out.bmp");
|
||||
return 0;
|
||||
}
|
44
projektna_naloga/compression/include/BitReader.h
Normal file
44
projektna_naloga/compression/include/BitReader.h
Normal file
@@ -0,0 +1,44 @@
|
||||
#pragma once
|
||||
#include "Buffer.h"
|
||||
|
||||
class BitReader
|
||||
{
|
||||
public:
|
||||
int k = 8;
|
||||
Buffer buffer;
|
||||
char x = 0;
|
||||
size_t pos = 0;
|
||||
|
||||
int readInt()
|
||||
{
|
||||
int ret = *(int *)&buffer.buffer[pos];
|
||||
pos += 4;
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned short int readShort()
|
||||
{
|
||||
short ret = *(unsigned short int *)&buffer.buffer[pos];
|
||||
pos += 2;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char readByte()
|
||||
{
|
||||
x = buffer.buffer[pos];
|
||||
pos++;
|
||||
return x;
|
||||
}
|
||||
|
||||
bool readBit()
|
||||
{
|
||||
if (k == 8)
|
||||
{
|
||||
readByte();
|
||||
k = 0;
|
||||
}
|
||||
bool b = (x >> k) & 1;
|
||||
k++;
|
||||
return b;
|
||||
}
|
||||
};
|
43
projektna_naloga/compression/include/BitWriter.h
Normal file
43
projektna_naloga/compression/include/BitWriter.h
Normal file
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
#include "Buffer.h"
|
||||
|
||||
class BitWriter
|
||||
{
|
||||
public:
|
||||
int k = 0;
|
||||
Buffer buffer;
|
||||
char x = 0;
|
||||
|
||||
void writeByte(uint8_t v)
|
||||
{
|
||||
buffer.add_end(&v, sizeof(v));
|
||||
}
|
||||
|
||||
void writeInt(int v)
|
||||
{
|
||||
buffer.add_end((uint8_t *)&v, sizeof(v));
|
||||
}
|
||||
|
||||
void write16(unsigned short int v)
|
||||
{
|
||||
buffer.add_end((uint8_t *)&v, sizeof(v));
|
||||
}
|
||||
|
||||
void writeBit(bool b)
|
||||
{
|
||||
if (k == 8)
|
||||
{
|
||||
writeByte(x);
|
||||
k = 0;
|
||||
x = 0;
|
||||
}
|
||||
x ^= (-b ^ x) & (1 << k);
|
||||
k++;
|
||||
}
|
||||
|
||||
void finish()
|
||||
{
|
||||
if (k > 0)
|
||||
writeByte(x);
|
||||
}
|
||||
};
|
37
projektna_naloga/compression/include/Buffer.h
Normal file
37
projektna_naloga/compression/include/Buffer.h
Normal file
@@ -0,0 +1,37 @@
|
||||
#pragma once
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
|
||||
class Buffer
|
||||
{
|
||||
public:
|
||||
uint8_t *buffer = nullptr;
|
||||
size_t taken = 0;
|
||||
size_t size = 0;
|
||||
std::string file_path;
|
||||
|
||||
Buffer(size_t size);
|
||||
Buffer();
|
||||
~Buffer();
|
||||
bool resize(size_t new_size);
|
||||
int add_end(uint8_t *data, size_t data_size);
|
||||
int add_middle(uint8_t *data, size_t data_size, size_t index);
|
||||
void copy(Buffer &other);
|
||||
|
||||
// Removes data from buffer without checking if it's in the buffer
|
||||
void remove_fast(uint8_t *data, size_t data_size);
|
||||
|
||||
void remove(size_t index, size_t data_size);
|
||||
|
||||
int find(uint8_t *data, size_t data_size);
|
||||
|
||||
void remove(uint8_t *data, size_t data_size);
|
||||
|
||||
void clear() { taken = 0; }
|
||||
|
||||
bool save_to_file();
|
||||
bool save_to_file(std::string file_path);
|
||||
|
||||
bool load_from_file();
|
||||
bool load_from_file(std::string file_path);
|
||||
};
|
15
projektna_naloga/compression/include/compressor.h
Normal file
15
projektna_naloga/compression/include/compressor.h
Normal file
@@ -0,0 +1,15 @@
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
#include "BitWriter.h"
|
||||
|
||||
class Compressor
|
||||
{
|
||||
public:
|
||||
BitWriter writer;
|
||||
void compress(std::vector<std::vector<uint8_t>> &matrix);
|
||||
|
||||
private:
|
||||
void IC(std::vector<int> &C, int L, int H);
|
||||
std::vector<int> predict(std::vector<std::vector<uint8_t>> &P);
|
||||
void encode(int v, int g);
|
||||
};
|
14
projektna_naloga/compression/include/decompressor.h
Normal file
14
projektna_naloga/compression/include/decompressor.h
Normal file
@@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
#include "BitReader.h"
|
||||
#include <vector>
|
||||
class Decompressor
|
||||
{
|
||||
public:
|
||||
std::vector<unsigned char> decompress(int &width, int &hight);
|
||||
|
||||
BitReader reader;
|
||||
|
||||
int decode(int g);
|
||||
void DEIC(std::vector<int> &C, int L, int H);
|
||||
std::vector<unsigned char> predictInvers(std::vector<int> &E, int width, int hight);
|
||||
};
|
7
projektna_naloga/compression/include/stb.h
Normal file
7
projektna_naloga/compression/include/stb.h
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
|
||||
unsigned char *stb_l(char const *filename, int *x, int *y, int *comp, int req_comp);
|
||||
|
||||
int stb_w(char const *filename, int x, int y, int comp, const void *data);
|
||||
|
||||
unsigned char *stb_lfm(unsigned char const *buffer, int len, int *x, int *y, int *comp, int req_comp);
|
9370
projektna_naloga/compression/include/stb_image.h
Normal file
9370
projektna_naloga/compression/include/stb_image.h
Normal file
File diff suppressed because it is too large
Load Diff
1908
projektna_naloga/compression/include/stb_image_write.h
Normal file
1908
projektna_naloga/compression/include/stb_image_write.h
Normal file
File diff suppressed because it is too large
Load Diff
325
projektna_naloga/compression/include/utils.h
Normal file
325
projektna_naloga/compression/include/utils.h
Normal file
@@ -0,0 +1,325 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
#define VECTOR_UTILS
|
||||
#define BUFFER
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
|
||||
#ifdef BUFFER
|
||||
class Buffer
|
||||
{
|
||||
public:
|
||||
uint8_t *buffer = nullptr;
|
||||
size_t taken = 0;
|
||||
size_t size = 0;
|
||||
std::string file_path;
|
||||
|
||||
Buffer(size_t size);
|
||||
Buffer();
|
||||
~Buffer();
|
||||
bool resize(size_t new_size);
|
||||
int add_end(uint8_t *data, size_t data_size);
|
||||
int add_middle(uint8_t *data, size_t data_size, size_t index);
|
||||
void copy(Buffer &other);
|
||||
|
||||
// Removes data from buffer without checking if it's in the buffer
|
||||
void remove_fast(uint8_t *data, size_t data_size);
|
||||
|
||||
void remove(size_t index, size_t data_size);
|
||||
|
||||
int find(uint8_t *data, size_t data_size);
|
||||
|
||||
void remove(uint8_t *data, size_t data_size);
|
||||
|
||||
void clear() { taken = 0; }
|
||||
|
||||
bool save_to_file();
|
||||
bool save_to_file(std::string file_path);
|
||||
|
||||
bool load_from_file();
|
||||
bool load_from_file(std::string file_path);
|
||||
};
|
||||
|
||||
Buffer::Buffer()
|
||||
{
|
||||
buffer = nullptr;
|
||||
size = 0;
|
||||
taken = 0;
|
||||
}
|
||||
|
||||
Buffer::Buffer(size_t size)
|
||||
{
|
||||
this->size = size;
|
||||
this->buffer = new uint8_t[size];
|
||||
}
|
||||
|
||||
Buffer::~Buffer()
|
||||
{
|
||||
if (buffer)
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
bool Buffer::resize(size_t new_size)
|
||||
{
|
||||
if (size >= new_size)
|
||||
return true;
|
||||
if (new_size < size * 2)
|
||||
new_size = size * 2;
|
||||
uint8_t *new_buffer = (uint8_t *)realloc(buffer, new_size);
|
||||
if (!new_buffer)
|
||||
{
|
||||
printf("Error resizing buffer\n");
|
||||
return false;
|
||||
}
|
||||
buffer = new_buffer;
|
||||
size = new_size;
|
||||
return true;
|
||||
}
|
||||
|
||||
int Buffer::add_end(uint8_t *data, size_t data_size)
|
||||
{
|
||||
if (taken + data_size > size)
|
||||
if (!resize(size + data_size))
|
||||
return -1;
|
||||
|
||||
memcpy(buffer + taken, data, data_size);
|
||||
taken += data_size;
|
||||
return taken - data_size;
|
||||
}
|
||||
|
||||
int Buffer::add_middle(uint8_t *data, size_t data_size, size_t index)
|
||||
{
|
||||
if (taken + data_size > size)
|
||||
if (!resize(size + data_size))
|
||||
return -1;
|
||||
memmove(buffer + index + data_size, buffer + index, taken - index);
|
||||
memcpy(buffer + index, data, data_size);
|
||||
taken += data_size;
|
||||
return index;
|
||||
}
|
||||
|
||||
void Buffer::copy(Buffer &other)
|
||||
{
|
||||
if (other.size > size)
|
||||
if (!resize(other.size))
|
||||
return;
|
||||
memcpy(buffer, other.buffer, other.taken);
|
||||
taken = other.taken;
|
||||
}
|
||||
|
||||
void Buffer::remove_fast(uint8_t *data, size_t data_size)
|
||||
{
|
||||
int64_t index = data - buffer;
|
||||
if (index < 0 || index > taken || index + data_size > taken)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
memmove(buffer + index, buffer + index + data_size, taken - index - data_size);
|
||||
taken -= data_size;
|
||||
}
|
||||
|
||||
void Buffer::remove(size_t index, size_t data_size)
|
||||
{
|
||||
if (index + data_size > taken)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
memmove(buffer + index, buffer + index + data_size, taken - index - data_size);
|
||||
taken -= data_size;
|
||||
}
|
||||
|
||||
int Buffer::find(uint8_t *data, size_t data_size)
|
||||
{
|
||||
for (int i = 0; i < taken; i++)
|
||||
if (memcmp(buffer + i, data, data_size) == 0)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Buffer::remove(uint8_t *data, size_t data_size)
|
||||
{
|
||||
int index = find(data, data_size);
|
||||
if (index == -1)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
remove(index, data_size);
|
||||
}
|
||||
|
||||
bool Buffer::save_to_file()
|
||||
{
|
||||
std::ofstream file(this->file_path, std::ios::binary | std::ios::out);
|
||||
if (!file.is_open())
|
||||
{
|
||||
printf("Error saving file\n");
|
||||
return false;
|
||||
}
|
||||
file.write((char *)this->buffer, this->taken);
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Buffer::save_to_file(std::string file_path)
|
||||
{
|
||||
this->file_path = file_path;
|
||||
return save_to_file();
|
||||
}
|
||||
|
||||
bool Buffer::load_from_file()
|
||||
{
|
||||
std::ifstream file(this->file_path, std::ios::binary | std::ios::in);
|
||||
if (!file.is_open())
|
||||
return false;
|
||||
|
||||
file.seekg(0, std::ios::end);
|
||||
|
||||
size_t file_size = file.tellg();
|
||||
resize(file_size);
|
||||
|
||||
file.seekg(0, std::ios::beg);
|
||||
file.read((char *)buffer, size);
|
||||
|
||||
if (file)
|
||||
taken = file_size;
|
||||
else
|
||||
taken = file.gcount();
|
||||
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Buffer::load_from_file(std::string file_path)
|
||||
{
|
||||
this->file_path = file_path;
|
||||
return load_from_file();
|
||||
}
|
||||
|
||||
#endif // BUFFER
|
||||
|
||||
#ifdef BIT_READER
|
||||
|
||||
class BitReader
|
||||
{
|
||||
public:
|
||||
int k = 8;
|
||||
Buffer buffer;
|
||||
char x = 0;
|
||||
size_t pos = 0;
|
||||
|
||||
int readInt()
|
||||
{
|
||||
int ret = *(int *)&buffer.buffer[pos];
|
||||
pos += 4;
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned short int readShort()
|
||||
{
|
||||
short ret = *(unsigned short int *)&buffer.buffer[pos];
|
||||
pos += 2;
|
||||
return ret;
|
||||
}
|
||||
|
||||
char readByte()
|
||||
{
|
||||
x = buffer.buffer[pos];
|
||||
pos++;
|
||||
return x;
|
||||
}
|
||||
|
||||
bool readBit()
|
||||
{
|
||||
if (k == 8)
|
||||
{
|
||||
readByte();
|
||||
k = 0;
|
||||
}
|
||||
bool b = (x >> k) & 1;
|
||||
k++;
|
||||
return b;
|
||||
}
|
||||
};
|
||||
#endif // BIT_READER
|
||||
|
||||
#ifdef BIT_WRITER
|
||||
|
||||
class BitWriter
|
||||
{
|
||||
public:
|
||||
int k = 0;
|
||||
Buffer buffer;
|
||||
char x = 0;
|
||||
|
||||
void writeByte(uint8_t v)
|
||||
{
|
||||
buffer.add_end(&v, sizeof(v));
|
||||
}
|
||||
|
||||
void writeInt(int v)
|
||||
{
|
||||
buffer.add_end((uint8_t *)&v, sizeof(v));
|
||||
}
|
||||
|
||||
void write16(unsigned short int v)
|
||||
{
|
||||
buffer.add_end((uint8_t *)&v, sizeof(v));
|
||||
}
|
||||
|
||||
void writeBit(bool b)
|
||||
{
|
||||
if (k == 8)
|
||||
{
|
||||
writeByte(x);
|
||||
k = 0;
|
||||
x = 0;
|
||||
}
|
||||
x ^= (-b ^ x) & (1 << k);
|
||||
k++;
|
||||
}
|
||||
|
||||
void finish()
|
||||
{
|
||||
if (k > 0)
|
||||
writeByte(x);
|
||||
}
|
||||
};
|
||||
#endif // BIT_WRITER
|
||||
|
||||
#ifdef VECTOR_UTILS
|
||||
template <typename T>
|
||||
void print_vec(std::vector<T> &vec, int wrap = 5)
|
||||
{
|
||||
for (size_t i = 0; i < vec.size(); i++)
|
||||
{
|
||||
printf("%2d ", vec[i]);
|
||||
if (i % wrap == wrap - 1)
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void print_matrix(std::vector<std::vector<T>> &vec)
|
||||
{
|
||||
for (size_t i = 0; i < vec.size(); i++)
|
||||
{
|
||||
for (size_t j = 0; j < vec[i].size(); j++)
|
||||
{
|
||||
printf("%2d ", vec[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
#endif // VECTOR_UTILS
|
148
projektna_naloga/compression/main.cpp
Normal file
148
projektna_naloga/compression/main.cpp
Normal file
@@ -0,0 +1,148 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <chrono>
|
||||
#include <ctime>
|
||||
#include <optional>
|
||||
#include <filesystem>
|
||||
#include <thread>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cstdio>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include "compressor.h"
|
||||
#include "stb.h"
|
||||
|
||||
size_t WriteCallback(void *contents, size_t size, size_t nmemb, std::string *buffer)
|
||||
{
|
||||
size_t total_size = size * nmemb;
|
||||
buffer->append((char *)contents, total_size);
|
||||
return total_size;
|
||||
}
|
||||
|
||||
unsigned char *getImg(const char *url, int *x, int *y, int *n, CURL *curl)
|
||||
{
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
|
||||
std::string response_data;
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data);
|
||||
|
||||
CURLcode res = curl_easy_perform(curl);
|
||||
if (res != CURLE_OK)
|
||||
{
|
||||
std::printf("Error: %s, %s\n", curl_easy_strerror(res), url);
|
||||
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return stb_lfm(reinterpret_cast<const unsigned char *>(response_data.c_str()), response_data.size(), x, y, n, 1);
|
||||
}
|
||||
|
||||
bool compress(const char *url, const char *savepath, CURL *curl)
|
||||
{
|
||||
int x, y, n;
|
||||
unsigned char *data = getImg(url, &x, &y, &n, curl);
|
||||
if (data == NULL)
|
||||
{
|
||||
printf("Error loading image!\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<std::vector<unsigned char>> matrix(x, std::vector<unsigned char>(y));
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
for (int j = 0; j < y; j++)
|
||||
{
|
||||
matrix[i][j] = data[i * y + j];
|
||||
}
|
||||
}
|
||||
delete[] data;
|
||||
Compressor com;
|
||||
com.compress(matrix);
|
||||
com.writer.buffer.save_to_file(savepath);
|
||||
return true;
|
||||
}
|
||||
|
||||
struct data
|
||||
{
|
||||
int location_id;
|
||||
int camera_id;
|
||||
std::string url;
|
||||
data(int i, int x, std::string u) : location_id(i), camera_id(x), url(u) {}
|
||||
};
|
||||
|
||||
std::vector<data> getData()
|
||||
{
|
||||
std::ifstream file("cameras.csv");
|
||||
std::string line;
|
||||
|
||||
std::vector<data> ret;
|
||||
|
||||
while (std::getline(file, line))
|
||||
{
|
||||
std::stringstream ss(line);
|
||||
std::string s;
|
||||
std::getline(ss, s, ',');
|
||||
int location_id = std::stoi(s);
|
||||
|
||||
std::getline(ss, s, ',');
|
||||
int camera_id = std::stoi(s);
|
||||
std::getline(ss, s, '\n');
|
||||
|
||||
ret.emplace_back(data(location_id, camera_id, s));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
CURL *curl;
|
||||
CURLcode res = curl_global_init(CURL_GLOBAL_DEFAULT);
|
||||
if (res != CURLE_OK)
|
||||
{
|
||||
std::cerr << "curl_global_init() failed: " << curl_easy_strerror(res) << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
curl = curl_easy_init();
|
||||
if (!curl)
|
||||
{
|
||||
std::cerr << "Failed to initialize cURL." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
char buffer[100] = {0};
|
||||
std::vector<data> vData = getData();
|
||||
|
||||
while (true)
|
||||
{
|
||||
auto curTime = std::chrono::system_clock::now();
|
||||
std::time_t curTime_t = std::chrono::system_clock::to_time_t(curTime);
|
||||
std::tm *cur_tm = std::localtime(&curTime_t);
|
||||
|
||||
std::sprintf(buffer, "%d", cur_tm->tm_year + 1900);
|
||||
std::filesystem::create_directory(buffer);
|
||||
std::sprintf(buffer, "%d/%02d", cur_tm->tm_year + 1900, cur_tm->tm_mon + 1);
|
||||
std::filesystem::create_directory(buffer);
|
||||
std::sprintf(buffer, "%d/%02d/%02d", cur_tm->tm_year + 1900, cur_tm->tm_mon + 1, cur_tm->tm_mday);
|
||||
std::filesystem::create_directory(buffer);
|
||||
std::sprintf(buffer, "%d/%02d/%02d/%02d", cur_tm->tm_year + 1900, cur_tm->tm_mon + 1, cur_tm->tm_mday, cur_tm->tm_hour);
|
||||
std::filesystem::create_directory(buffer);
|
||||
|
||||
for (size_t i = 0; i < vData.size(); i++)
|
||||
{
|
||||
std::sprintf(buffer, "%d/%02d/%02d/%02d/%03d_%d.bin", cur_tm->tm_year + 1900, cur_tm->tm_mon + 1, cur_tm->tm_mday, cur_tm->tm_hour, vData[i].location_id, vData[i].camera_id);
|
||||
std::printf("%d %d %s\n", vData[i].location_id, vData[i].camera_id, vData[i].url.c_str());
|
||||
// std::printf("Store: %s\n", buffer);
|
||||
compress(vData[i].url.c_str(), buffer, curl);
|
||||
}
|
||||
|
||||
std::printf("Done\n");
|
||||
std::this_thread::sleep_for(std::chrono::hours(1));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
41
projektna_naloga/compression/makefile
Normal file
41
projektna_naloga/compression/makefile
Normal file
@@ -0,0 +1,41 @@
|
||||
CC=g++
|
||||
|
||||
CFLAGS= -std=c++23
|
||||
|
||||
INCLUDE_DIR= include
|
||||
|
||||
SRC_DIR= src
|
||||
|
||||
BUILD_DIR= build
|
||||
|
||||
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
|
||||
|
||||
OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS))
|
||||
|
||||
all: directories main run
|
||||
|
||||
directories:
|
||||
mkdir -p $(BUILD_DIR)
|
||||
|
||||
# Rule to compile each source file into an object file
|
||||
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp $(INCLUDE_DIR)/*.h
|
||||
$(CC) $(CFLAGS) -O3 -I$(INCLUDE_DIR) -c $< -o $@
|
||||
|
||||
# Rule to link the object files into the main executable
|
||||
main: main.cpp $(OBJS)
|
||||
$(CC) $(CFLAGS) -O3 -I$(INCLUDE_DIR) $(OBJS) main.cpp -o main -lcurl
|
||||
|
||||
debug: main.cpp $(SRCS)
|
||||
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) $(SRCS) -g main.cpp -o main -lcurl
|
||||
|
||||
dec: dec.cpp $(OBJS)
|
||||
$(CC) $(CFLAGS) -I$(INCLUDE_DIR) $(OBJS) -g dec.cpp -o dec
|
||||
|
||||
run: main
|
||||
./main
|
||||
|
||||
zip:
|
||||
zip -r main.zip main.cpp $(INCLUDE_DIR) $(SRC_DIR) makefile dec.cpp cameras.csv porocilo.pptx
|
||||
|
||||
clean:
|
||||
rm main out.bmp dec build/*.o
|
BIN
projektna_naloga/compression/porocilo.pptx
Normal file
BIN
projektna_naloga/compression/porocilo.pptx
Normal file
Binary file not shown.
162
projektna_naloga/compression/src/Buffer.cpp
Normal file
162
projektna_naloga/compression/src/Buffer.cpp
Normal file
@@ -0,0 +1,162 @@
|
||||
#include "Buffer.h"
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <cstring>
|
||||
|
||||
Buffer::Buffer()
|
||||
{
|
||||
buffer = nullptr;
|
||||
size = 0;
|
||||
taken = 0;
|
||||
}
|
||||
|
||||
Buffer::Buffer(size_t size)
|
||||
{
|
||||
this->size = size;
|
||||
this->buffer = new uint8_t[size];
|
||||
}
|
||||
|
||||
Buffer::~Buffer()
|
||||
{
|
||||
if (buffer)
|
||||
delete[] buffer;
|
||||
}
|
||||
|
||||
bool Buffer::resize(size_t new_size)
|
||||
{
|
||||
if (size >= new_size)
|
||||
return true;
|
||||
if (new_size < size * 2)
|
||||
new_size = size * 2;
|
||||
uint8_t *new_buffer = (uint8_t *)realloc(buffer, new_size);
|
||||
if (!new_buffer)
|
||||
{
|
||||
printf("Error resizing buffer\n");
|
||||
return false;
|
||||
}
|
||||
buffer = new_buffer;
|
||||
size = new_size;
|
||||
return true;
|
||||
}
|
||||
|
||||
int Buffer::add_end(uint8_t *data, size_t data_size)
|
||||
{
|
||||
if (taken + data_size > size)
|
||||
if (!resize(size + data_size))
|
||||
return -1;
|
||||
|
||||
memcpy(buffer + taken, data, data_size);
|
||||
taken += data_size;
|
||||
return taken - data_size;
|
||||
}
|
||||
|
||||
int Buffer::add_middle(uint8_t *data, size_t data_size, size_t index)
|
||||
{
|
||||
if (taken + data_size > size)
|
||||
if (!resize(size + data_size))
|
||||
return -1;
|
||||
memmove(buffer + index + data_size, buffer + index, taken - index);
|
||||
memcpy(buffer + index, data, data_size);
|
||||
taken += data_size;
|
||||
return index;
|
||||
}
|
||||
|
||||
void Buffer::copy(Buffer &other)
|
||||
{
|
||||
if (other.size > size)
|
||||
if (!resize(other.size))
|
||||
return;
|
||||
memcpy(buffer, other.buffer, other.taken);
|
||||
taken = other.taken;
|
||||
}
|
||||
|
||||
void Buffer::remove_fast(uint8_t *data, size_t data_size)
|
||||
{
|
||||
int64_t index = data - buffer;
|
||||
if (index < 0 || index > taken || index + data_size > taken)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
memmove(buffer + index, buffer + index + data_size, taken - index - data_size);
|
||||
taken -= data_size;
|
||||
}
|
||||
|
||||
void Buffer::remove(size_t index, size_t data_size)
|
||||
{
|
||||
if (index + data_size > taken)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
memmove(buffer + index, buffer + index + data_size, taken - index - data_size);
|
||||
taken -= data_size;
|
||||
}
|
||||
|
||||
int Buffer::find(uint8_t *data, size_t data_size)
|
||||
{
|
||||
for (int i = 0; i < taken; i++)
|
||||
if (memcmp(buffer + i, data, data_size) == 0)
|
||||
return i;
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void Buffer::remove(uint8_t *data, size_t data_size)
|
||||
{
|
||||
int index = find(data, data_size);
|
||||
if (index == -1)
|
||||
{
|
||||
printf("Error removing from buffer\n");
|
||||
return;
|
||||
}
|
||||
remove(index, data_size);
|
||||
}
|
||||
|
||||
bool Buffer::save_to_file()
|
||||
{
|
||||
std::ofstream file(this->file_path, std::ios::binary | std::ios::out);
|
||||
if (!file.is_open())
|
||||
{
|
||||
printf("Error saving file\n");
|
||||
return false;
|
||||
}
|
||||
file.write((char *)this->buffer, this->taken);
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Buffer::save_to_file(std::string file_path)
|
||||
{
|
||||
this->file_path = file_path;
|
||||
return save_to_file();
|
||||
}
|
||||
|
||||
bool Buffer::load_from_file()
|
||||
{
|
||||
std::ifstream file(this->file_path, std::ios::binary | std::ios::in);
|
||||
if (!file.is_open())
|
||||
return false;
|
||||
|
||||
file.seekg(0, std::ios::end);
|
||||
|
||||
size_t file_size = file.tellg();
|
||||
resize(file_size);
|
||||
|
||||
file.seekg(0, std::ios::beg);
|
||||
file.read((char *)buffer, size);
|
||||
|
||||
if (file)
|
||||
taken = file_size;
|
||||
else
|
||||
taken = file.gcount();
|
||||
|
||||
file.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Buffer::load_from_file(std::string file_path)
|
||||
{
|
||||
this->file_path = file_path;
|
||||
return load_from_file();
|
||||
}
|
98
projektna_naloga/compression/src/compressor.cpp
Normal file
98
projektna_naloga/compression/src/compressor.cpp
Normal file
@@ -0,0 +1,98 @@
|
||||
#include "compressor.h"
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
std::vector<int> Compressor::predict(std::vector<std::vector<uint8_t>> &P)
|
||||
{
|
||||
int hight = P.size();
|
||||
int width = P[0].size();
|
||||
std::vector<int> E(hight * width, 0);
|
||||
|
||||
E[0] = P[0][0];
|
||||
|
||||
for (size_t i = 1; i < width; i++)
|
||||
{
|
||||
E[i] = P[0][i - 1] - P[0][i];
|
||||
}
|
||||
|
||||
for (size_t i = 1; i < hight; i++)
|
||||
{
|
||||
E[i * width] = P[i - 1][0] - P[i][0];
|
||||
}
|
||||
|
||||
for (size_t y = 1; y < hight; y++)
|
||||
{
|
||||
for (size_t x = 1; x < width; x++)
|
||||
{
|
||||
if (P[y - 1][x - 1] >= std::max(P[y][x - 1], P[y - 1][x]))
|
||||
{
|
||||
E[y * width + x] = std::min(P[y][x - 1], P[y - 1][x]) - P[y][x];
|
||||
}
|
||||
else if (P[y - 1][x - 1] <= std::min(P[y][x - 1], P[y - 1][x]))
|
||||
{
|
||||
E[y * width + x] = std::max(P[y][x - 1], P[y - 1][x]) - P[y][x];
|
||||
}
|
||||
else
|
||||
{
|
||||
E[y * width + x] = P[y][x - 1] + P[y - 1][x] - P[y - 1][x - 1] - P[y][x];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return E;
|
||||
}
|
||||
|
||||
void Compressor::encode(int v, int g)
|
||||
{
|
||||
for (int i = 0; i < g; ++i)
|
||||
{
|
||||
writer.writeBit((v >> i) & 1);
|
||||
}
|
||||
}
|
||||
|
||||
void Compressor::IC(std::vector<int> &C, int L, int H)
|
||||
{
|
||||
if (H - L <= 1)
|
||||
return;
|
||||
if (C[H] == C[L])
|
||||
return;
|
||||
|
||||
int m = (H + L) / 2;
|
||||
int g = std::ceil(std::log2(C[H] - C[L] + 1));
|
||||
|
||||
encode(C[m] - C[L], g);
|
||||
|
||||
if (L < m)
|
||||
IC(C, L, m);
|
||||
if (m < H)
|
||||
IC(C, m, H);
|
||||
}
|
||||
|
||||
void Compressor::compress(std::vector<std::vector<uint8_t>> &matrix)
|
||||
{
|
||||
std::vector<int> E = predict(matrix);
|
||||
|
||||
std::vector<int> N(E.size(), 0);
|
||||
N[0] = E[0];
|
||||
for (size_t i = 1; i < E.size(); i++)
|
||||
{
|
||||
if (E[i] >= 0)
|
||||
N[i] = 2 * E[i];
|
||||
else
|
||||
N[i] = 2 * std::abs(E[i]) - 1;
|
||||
}
|
||||
|
||||
std::vector<int> C(N.size(), 0);
|
||||
C[0] = N[0];
|
||||
for (size_t i = 1; i < C.size(); i++)
|
||||
{
|
||||
C[i] = C[i - 1] + N[i];
|
||||
}
|
||||
writer.write16(matrix.size());
|
||||
writer.writeByte(E[0]);
|
||||
writer.writeInt(C[C.size() - 1]);
|
||||
writer.writeInt(C.size());
|
||||
|
||||
IC(C, 0, C.size() - 1);
|
||||
writer.finish();
|
||||
}
|
119
projektna_naloga/compression/src/decompressor.cpp
Normal file
119
projektna_naloga/compression/src/decompressor.cpp
Normal file
@@ -0,0 +1,119 @@
|
||||
#
|
||||
#include <vector>
|
||||
#include <cmath>
|
||||
#include <iostream>
|
||||
|
||||
#include "decompressor.h"
|
||||
#include "BitReader.h"
|
||||
|
||||
int Decompressor::decode(int g)
|
||||
{
|
||||
int v = 0;
|
||||
for (int i = 0; i < g; i++)
|
||||
{
|
||||
bool bit = reader.readBit();
|
||||
v |= bit << i;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
void Decompressor::DEIC(std::vector<int> &C, int L, int H)
|
||||
{
|
||||
if (H - L <= 1)
|
||||
return;
|
||||
|
||||
if (C[L] == C[H])
|
||||
{
|
||||
for (size_t i = L + 1; i < H; i++)
|
||||
{
|
||||
C[i] = C[L];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int M = (L + H) / 2;
|
||||
|
||||
int G = std::ceil(std::log2(C[H] - C[L] + 1));
|
||||
C[M] = C[L] + decode(G);
|
||||
if (L < M)
|
||||
DEIC(C, L, M);
|
||||
if (M < H)
|
||||
DEIC(C, M, H);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<unsigned char> Decompressor::predictInvers(std::vector<int> &E, int width, int hight)
|
||||
{
|
||||
std::vector<unsigned char> matrix1(width * hight, 0);
|
||||
matrix1[0] = E[0];
|
||||
|
||||
for (size_t i = 1; i < width; i++)
|
||||
{
|
||||
matrix1[i] = matrix1[i - 1] - E[i];
|
||||
}
|
||||
|
||||
for (size_t i = 1; i < hight; i++)
|
||||
{
|
||||
matrix1[i * width] = matrix1[(i - 1) * width] - E[i * width];
|
||||
}
|
||||
|
||||
for (size_t i = 1; i < hight; i++)
|
||||
{
|
||||
for (size_t j = 1; j < width; j++)
|
||||
{
|
||||
if (matrix1[(i - 1) * width + j - 1] >= std::max(matrix1[i * width + j - 1], matrix1[(i - 1) * width + j]))
|
||||
{
|
||||
matrix1[i * width + j] = std::min(matrix1[i * width + j - 1], matrix1[(i - 1) * width + j]) - E[i * width + j];
|
||||
}
|
||||
else if (matrix1[(i - 1) * width + j - 1] <= std::min(matrix1[i * width + j - 1], matrix1[(i - 1) * width + j]))
|
||||
{
|
||||
matrix1[i * width + j] = std::max(matrix1[i * width + j - 1], matrix1[(i - 1) * width + j]) - E[i * width + j];
|
||||
}
|
||||
else
|
||||
{
|
||||
matrix1[i * width + j] = matrix1[i * width + j - 1] + matrix1[(i - 1) * width + j] - matrix1[(i - 1) * width + j - 1] - E[i * width + j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return matrix1;
|
||||
}
|
||||
|
||||
std::vector<unsigned char> Decompressor::decompress(int &width, int &hight)
|
||||
{
|
||||
|
||||
hight = reader.readShort();
|
||||
int first = reader.readByte();
|
||||
int last = reader.readInt();
|
||||
int size = reader.readInt();
|
||||
width = size / hight;
|
||||
|
||||
std::vector<int> C(size, 0);
|
||||
C[0] = first;
|
||||
C[size - 1] = last;
|
||||
DEIC(C, 0, size - 1);
|
||||
|
||||
std::vector<int> N(size, 0);
|
||||
N[0] = C[0];
|
||||
for (size_t i = 1; i < size; i++)
|
||||
{
|
||||
N[i] = C[i] - C[i - 1];
|
||||
}
|
||||
|
||||
std::vector<int> E(size, 0);
|
||||
E[0] = N[0];
|
||||
|
||||
for (size_t i = 1; i < size; i++)
|
||||
{
|
||||
if (N[i] % 2 == 0)
|
||||
{
|
||||
E[i] = N[i] / 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
E[i] = -((N[i] + 1) / 2);
|
||||
}
|
||||
}
|
||||
|
||||
return predictInvers(E, width, hight);
|
||||
}
|
19
projektna_naloga/compression/src/stb.cpp
Normal file
19
projektna_naloga/compression/src/stb.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "stb.h"
|
||||
|
||||
#define STB_IMAGE_IMPLEMENTATION
|
||||
#include "stb_image.h"
|
||||
#define STB_IMAGE_WRITE_IMPLEMENTATION
|
||||
#include "stb_image_write.h"
|
||||
|
||||
unsigned char *stb_l(char const *filename, int *x, int *y, int *comp, int req_comp)
|
||||
{
|
||||
return stbi_load(filename, x, y, comp, req_comp);
|
||||
}
|
||||
int stb_w(char const *filename, int x, int y, int comp, const void *data)
|
||||
{
|
||||
return stbi_write_bmp(filename, x, y, comp, data);
|
||||
}
|
||||
unsigned char *stb_lfm(unsigned char const *buffer, int len, int *x, int *y, int *comp, int req_comp)
|
||||
{
|
||||
return stbi_load_from_memory(buffer, len, x, y, comp, req_comp);
|
||||
};
|
Reference in New Issue
Block a user