tablica z danymi jpeg na Image

0

Takie pytanie, czy mozna zrobic object Image z tablicy danych ale z skompresowanymi danymi w foramacie jpeg, gdzie w tablicy znajduje się naglówek i dane skompresowane?

0

To niewłaściwe pytanie. W informatyce na pytanie "czy można...?"
odpowiedź brzmi zawsze:
"Tak, kosztować to będzie...".
Krótko mówiąc nie ma odpowiedzi zaczynającej się od słowa "Niemożliwe".

A co do konkretnego pytania, to Image nie jest już obecnie obiektem. Image jest klasą abstrakcyjną. Oznacza to, że pod referencją Image może kryć się dosłownie wszystko. To czy dane w implementacji będą spakowane czy nie nie ma znaczenia tak długo jak długo metody, które komunikują się z innymi obiektami będą podawać dla tych obiektów prawidłowe dane. Tyle, że jest to zadanie implementującego konkretną wersję potomka image. Wcale bym się nie zdziwił gdyby okazało się, że dane obrazów są już obecnie trzymane w wersji skompresowanej tak długo jak to możliwe. Można sądzić, że VolatileImage zawiera dane rozpakowane (o ile nie ma użytej sprzętowej kompresji/dekompresji), ale co do innych obiektów typu Image nie można mieć takiej pewności. Ba, tak naprawdę nie wiadomo co kryje się pod obiektem Image, który dostajemy z jakiegoś wywołania. Równie dobrze może to być obiekt, który jest zbudowany na prywatnej podklasie do której nigdy nie będziemy mieć dostępu, ani żadnej wiedzy (nie mając ani źródeł, ani javadoc, ani nie dekompilując pliku .class, ani nie używając refleksji do odkrycia wszystkich pól i metod).

0

wiec tak wyraze sie jasniej:
mam zwykla jedno wymiarowa tablice a w niej skompresowane dane w formacie jpeg, znam wielkos obrazka to znaczy szerokosz i wysokosc stopien kompresji itd co zrobic by je zdekompresowac aby je wyswietlic w formie obrazka. chodzi o takie chaslo jak Jave jpeg encoder, znalazlem taki kod w javie tylko nie wiem jak go uzyc poniewaz z java mam doczynienia z tydzien czasu

import java.awt.Image;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import java.awt.Graphics2D;
import java.io.BufferedOutputStream;

try {
ByteArrayOutputStream sout = new
ByteArrayOutputStream();
JPEGImageEncoder encoder =
JPEGCodec.createJPEGEncoder(sout);
JPEGEncodeParam param =
encoder.getDefaultJPEGEncodeParam(thumbImage);

int quality = Math.max(0, Math.min(650,
100));
param.setQuality((float)quality / 100.0f,
false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage, param);
oPhoto.setBytesThumb(sout.toByteArray());
sout.close();
} catch (java.io.IOException ioe) {
ioe.printStackTrace();
}
} // end if image width or height
oPhoto.setBytesThumb(actual.get());
oPhoto.setAlbumID(1);
if(oPhoto.getBytesOriginal().length > 1) {
oPhoto.add();
}
}

albo takie cos
http://www.koders.com/java/fid646C951F5C8FC602AFB2336581C6415368DE590A.aspx

jak tu cos wyciagnac do dekompresji danych wiem ze to na pewno nie jest latwe

0

Przecież java sama dekompresuje obrazki (przecież wczytasz sobie obrazek jpeg, prawda?). Problem był tylko z kompresją.

0

racja tylko ja chce pobrac dane z innego zrodla a mianowicie z innego serwera nie przez url tylko recznie przez socket'a, dla tego sie pytam jak takie dane w formacie jpeg zdekompresowac?

0

Twoim rozwiązaniem jest klasa Toolkit i jej metody
public Image createImage(byte[] imagedata) lub
public abstract Image createImage(byte[] imagedata, int imageoffset, int imagelength)

Javadoc:

Creates an image which decodes the image stored in the specified byte array.
The data must be in some image format, such as GIF or JPEG, that is supported by this toolkit.

Parameters:
    imagedata - an array of bytes, representing image data in a supported image format. 
Returns:
    an image.
Since:
    JDK1.1

Z tego co mi się wydaje obsługiwane są obecnie również dane w formacie PNG (nastąpiło to chyba w wersji 1.3).

ps.

albo takie cos
http://www.koders.com/java/fid[...]2AFB2336581C6415368DE590A.aspx

Oglądnąłem sobie kod zawarty na tej stronie i moim zdaniem zakodowana tam kompresja JPEG, to ordynarne i prymitywne zerżnięcie kodu w C++, które kompletnie nie uwzględnia możliwości Javy (nawet 1.2), nie wspominając już o optymalizacji. Źródła z tamtej strony to moim zdaniem przykład jak nie należy programować w Javie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1