• 6 odgovora
  • 2.860 pregleda
c++ gde je greska? 06.04.2006. u 21:25 · pre 250 meseci #1
Program za zamenu plave boje crvenom:

#include <stdio.h>
main()
{
FILE *fp1,*fp2;
int c,n,m,l,d;
fp1=fopen("c:\slika.jpg","rb");
fp2=fopen("c:\slika2.jpg","wb");
for (n=1;n<119;n++)
putc(fgetc(fp1),fp2);
for (n=479;n>=0;--n)
{
for (m=319;m>=0;--m)
{
c=fgetc(fp1);
l=c/16;
d=c-(l*16);
if(l==4)l=1;if(l==0xc)l=0x9;
if(d==4)d=1;if(d==0xc)d=0x9;
c=l*16+d;
putc(c,fp2);
}}
fclose(fp1);fclose(fp2);}

Gde sam pogresio?
Re: c++ gde je greska? 07.04.2006. u 02:07 · pre 250 meseci #2
Preporuka. Zamjeni svoje sa ovim :

Code:

fp1=fopen("c://slika.jpg","rb");
fp2=fopen("c://slika2.jpg","wb");


Jer se backslash unutar stringa konta kao posebna sekvenca, u spoju sa iducim znakom. Recimo "\n" za newline i slicno. U tvom slucaju kompajler pokusava prokuzit sekvencu "\s".

A onda...imas gresku u algoritmu za konverziju negdje. Nikad nisam ovo rucno radio, pa ti ne mogu pomoc.
Potpis

Q: HSP56 Micromodem nece da radi kompjuter ga prepozna a kad treba da se konektujem nece ne daje ni znaka zivota. u cemu je problem.

A: Crko mozda od grmljavine mozda od spanaca. Uglavnom baci ga u WC solju jako povuci vodu. Skupi 5e i uzmi drugi i ne postuj temu na pogresno mesto.
Re: c++ gde je greska? 07.04.2006. u 07:39 · pre 250 meseci #3
Citat:

fp1=fopen("c://slika.jpg","rb");
fp2=fopen("c://slika2.jpg","wb");


ili:

fp1=fopen("c:\\slika.jpg","rb");
fp2=fopen("c:\\slika2.jpg","wb");

ili:

fp1=fopen("c:/slika.jpg","rb");
fp2=fopen("c:/slika2.jpg","wb");

Re: c++ gde je greska? 07.04.2006. u 08:01 · pre 250 meseci #4
Odakle ti ovaj algoritam?

Osim ako nije neko tricky rješenje nekog ingenioznog matematičara, sumnjam da možeš mijenjat boje u jpg slici na ovaj način.
JPEG kompresija poprilično je zahtjevna. Procdura dekodiranja otprilike izgleda:
Huffman dekodiranje -> Inverzno DPCM kodiranje -> Inverzna kvantizacija -> Inverzna Disktretna Kosinusna Transformacija -> ....

Kad bi to mogli strpat u 5 linija golog c++ koda, eh ... di bi sutra bili. :)
Re: c++ gde je greska? 07.04.2006. u 09:15 · pre 250 meseci #5
Jel moze neko da mi posalje kod za JPEG?
Re: c++ gde je greska? 07.04.2006. u 09:38 · pre 250 meseci #6
Hm...

Kad je u pitanju JPG (koji nije 'linearan' format) pretpostavljam da je najbolje potraziti
na netu neke besplatne biblioteke koje ce JPG uciniti prividno 'lineranim', pa da se moze
sa njime raditi 'kroz petlju'.

Kao jedna od mogucnosti preostaje konvertovanje iz JPG i BMP pa da se nastavi rad sa
BMP-om. Doduse, ovo resenje nije bas najidealnije jer bi se svakom iteracijom potencijalno
gubilo na kvalitetu, sto je dobro poznato za JPG.

Mozda bi vredelo pogledati sajt:
http://www.efg2.com/Lab/
... koji doduse jeste za Delphi, ali source kod za takve stvari je u principu samo pitanje
matematike, sto se lako 'cita' i tumaci.
Re: c++ gde je greska? 07.04.2006. u 10:47 · pre 250 meseci #7
S WindowsXp dolazi GDI+ biblioteka (daleko napredniji library od standarnog GDI) : gdi.dll,
koja sadrži Image klasu za rad nad slikama tipa: BMP, ICON, GIF, JPEG, Exif, PNG, TIFF, WMF, i EMF -> više u MSDN-u.

Kod učitavanja slike ona se konvertira u BMP (u RAM-u) te se tamo mogu radit obrade, pa se pukne natrag u JPG.

Što se tiče gubitka kvalitete kod obrade JPEG slika,
ona je neizbježna osim kod nekih jednostavnijih operacija; rotiranje i flipanje ,opet uz određene uvjete na sliku.
Transformacije JPEG slika bez gubitaka su ograničene samim profocesom kodiranja slike.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme