sekantis klausimas:
MatLAB'e paprasta, ne taip kaip Java:
% surankiojam parametrus
....
% tile's width and height
tmp = str2num(char(pl.getParameter('tiles')));
tw=tmp(1); th=tmp(2);
% kiekvieną komponentą transformuojam į vektorių
if (size(img,2) == 3)
img_tmp(1,:) = reshape(img(:,:,1), 1,[]);
img_tmp(2,:) = reshape(img(:,:,2), 1,[]);
img_tmp(3,:) = reshape(img(:,:,3), 1,[]);
ci = [1 2 3];
else
img_tmp = reshape(img, 1,[]);
ci = 1;
end
% pasidarom 'javaArray'
% ibo testinis vaizdelis j/b, užteks vieno komponento
% kokio tipo turi būti 'img_'???
% ir iš viso masyvas jis ar ne?
% java.lang.Vector ?
% jj2000.j2k.image.input.ImgReader ?
% jj2000.j2k.image.BlkImgDataSrc ?
% nuo 'Tiler' konstruktoriaus masyvo tikrai neėmiau :(
img_ = javaArray('jj2000.j2k.image.input.ImgReader',size(img_tmp,2));
for l=1:size(img_tmp,2)
img_(l) = jj2000.j2k.image.input.ImgReader(img_tmp(1,l));
end
imgtiler = jj2000.j2k.image.Tiler(img_,refx,refy,trefx,trefy,tw,th);
architektūra pagal JavaDOC:
* <ul>
* <li>ImgReader</li>
* <li>ImgDataJoiner (if multiple image readers)</li>
* <li>ForwCompTransf</li>
* <li>Tiler</li>
* <li>ImgDataConverter</li>
* <li>ForwardWT</li>
* <li>Quantizer</li>
* <li>ROIScaler</li>
* <li>EntropyCoder</li>
* <li>PostCompRateAllocator</li>
* </ul>
*
* <P>The encoder uses a pull model. This means that the last module
* (PostCompRateAllocator) requests data from its source
(EntropyCoder),
* ...
Java:
pasaka tęsiasi taip (atmetus catch()):
//skaitom iš PPM | PGM | PPX failų:
imreadervec = new Vector();
....
imreadervec.addElement(new ImgReaderPGM(infile));
// arba
imreadervec.addElement(new ImgReaderPPM(infile));
// arba
imreadervec.addElement(new ImgReaderPGX(infile));
imreader = new ImgReader[imreadervec.size()];
imreadervec.copyInto(imreader);
imreadervec.removeAllElements();
imreadervec = null;
imsigned = new boolean[ncomp];
// **** ImgDataJoiner (if needed) ****
if (ppminput || ncomp == 1) { // Just one input
imgsrc = imreader[0];
for (i=0; i<ncomp; i++) {
imsigned[i] = imreader[0].isOrigSigned(i);
}
}
else { // More than one reader => join all readers into 1
imgcmpidxs = new int[ncomp];
for (i=0; i<ncomp; i++) {
imsigned[i] = imreader[i].isOrigSigned(0);
}
imgsrc = new ImgDataJoiner(imreader,imgcmpidxs);
}
// **** Tiler ****
// rankiojam parametrus
....
// Instantiate tiler
imgtiler = new Tiler(imgsrc,refx,refy,trefx,trefy,tw,th);
klasių medis:
public interface ImgData {
...
public interface BlkImgDataSrc extends ImgData {
...
public abstract class ImgReader implements BlkImgDataSrc {
...
public abstract class ImgDataAdapter implements ImgData {
/** Index of the current tile */
protected int tIdx = 0;
/** The ImgData source */
protected ImgData imgdatasrc;
// kitų konstruktorių čią nėrą
protected ImgDataAdapter(ImgData src) {
imgdatasrc = src;
}
public class ImgDataJoiner implements BlkImgDataSrc {
/** The list of input ImgData */
private BlkImgDataSrc[] imageData;
/** The component index associated with each ImgData */
private int[] compIdx;
// kitų konstruktorių čią nėrą
public ImgDataJoiner(BlkImgDataSrc[] imD, int[] cIdx){
int i;
int maxW, maxH;
// Initializes
imageData = imD;
compIdx = cIdx;
...
public class Tiler extends ImgDataAdapter implements BlkImgDataSrc {
/** The source of image data */
private final BlkImgDataSrc src;
private final int ax;
private final int ay;
private final int py;
private final int nw;
private final int nh;
...
public Tiler(BlkImgDataSrc src,int ax,int ay,int px,int py,int
nw,int nh) {
super(src);
int i,w,h;
// Verify that input is not tiled
if (src.getNumTiles() != 1) {
throw new IllegalArgumentException("Source is tiled");
}
...
--
ejs