Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: Tommi-The-Man - 06.04.08 - klo:10.27
-
Tarkoitus olisi saada jpg-kuvan pituus ja leveys int-muuttujiksi jotta niitä voisi myöhemmin ohjelmassa käytää. Jonkinlaisen mallikoodin jos voisi saada tänne. Kiitokset jo etukäteen.
-
Muistelisin javan tukevan jpg-kuvia, joten lataamalla kuvat muistiin ja katsomalla width ja height arvot näet kuvien koot. Ei kovin fiksu ratkaisu, mutta varmaankin toimiva.
Toinen ratkaisumalli, vaikken jpg:n headereita tunnekaan, niin todennäköisesti kuvan alussa header-osassa on leveys ja korkeus tiedot. Hexdumpilla voit katsoa jpg-tiedostoista, joista tiedät leveys- ja korkeus-tiedot, missä kohtaa löytyy 2, 3 tai 4 merkin mittainen määritelmä leveydestä ja korkeudesta. Tietenkin jos 3:n tai 4:n merkin mittaisia määritelmiä, niin ne näkyvät tiedostoissa nollina.
BMP:stä mulla saattaisi olla tollainen hexdumpilla etsitty koko-tiedot, muttei jpg:stä, mutta näe nyt edes sen verran vaivaa, että tutkit sitä kuvaa hexdumpilla, ja päättele kuvan koko.
Huom. Esim. 2288x1712 on hexana 08f0x06b0, joten etsittäviä, kun leveyttä etsitään, olevia hexjärjestyksiä ovat:
f008 tai ef08 tai 08f0 tai 08ef
Tämä siksi, että tiedostossa 1x1 pixelin kuva saatetaan esittää 0x0:na, lisäksi usein pienimmät yksiköt ilmoitetaan ennen suurimpia. Tietenkin noiden sarjojen lähettyvillä on joko 06 tai b006 tai af06.
Kyseiset arvot ko. kokoisesta jpg-kuvasta tai yleensäkin kuvasta löytyvät joko alusta tai lopusta tiedostoa.
Edit teimpäs senkin sinun puolestasi:
hexdump 00005.jpg |grep f008
0002180 ff08 00c0 0811 b006 f008 0103 0021 1102
Tässä pitäisi olla kaikki tarpeellinen tieto. ;)
-
public Kuva(File[] tiedostot, int kuvalaskuri){
kuvaindeksi = kuvalaskuri;
kuvafile = tiedostot[kuvaindeksi];
Viesti.kirjoita("Luetaan kuvaa..");
//luetaan kuva
FileInputStream fis=null;
try {
//fis = new FileInputStream(annettuTiedosto);
fis = new FileInputStream(kuvafile);
} catch (FileNotFoundException e) {
Viesti.virheilmo("Virhe kuvatiedoston " + kuvafile + "avaamisessa");
//e.printStackTrace();
}
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
try {
origKuva = decoder.decodeAsBufferedImage();
} catch (IOException e) {
Viesti.virheilmo("Virhe luettaessa kuvaa " + kuvafile);
//e.printStackTrace();
} catch (ImageFormatException e) {
Viesti.virheilmo("Kuva " + kuvafile + " ei ole kelvollinen JPEG - kuva, eik� sit� voida k�sitell�");
}
try {
fis.close();
} catch (IOException e) {
Viesti.virheilmo("Virhe suljettaessa tiedostoa " + kuvafile);
//e.printStackTrace();
}
//luetaan kuvan koot muuttujiin
korkeus = origKuva.getHeight();
leveys = origKuva.getWidth();
Sori rikkinäiset skandit.
Mutta lyhyesti: kuva luetaan seuraavalla tavalla.
fis = new FileInputStream(kuvafile);
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(fis);
origKuva = decoder.decodeAsBufferedImage();
fis.close();
ja koon lukeminen:
korkeus = origKuva.getHeight();
leveys = origKuva.getWidth();
r