1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
Point cursor=new java.awt.Point(0,0);
segment = first;
int consumed = 0;
while(segment!=null) {
consumed = cropSegment(segment, cursor, width, height, xstart, ystart, nbcol, nbrow, newimage, consumed);
if ( consumed>=segment.n ) {
segment=segment.suivant;
consumed=0;
}
}
}
private int cropSegment(Segment segment, Point cursor, int width, int height, int xstart, int ystart, int nbcol, int nbrow, Liste newimage, int consumed) {
int xbloc=cursor.x+consumed; // début du bloc dans le segment segment à lire
int nb = segment.n-consumed; // nombre de point qu'il reste à lire dans le segment
int currentconsumed=0; // représente le nombre de point qu'on va lire
if ( ystart>=y && cursor.y<=(ystart+nbrow) && xstart>=xbloc && xbloc<=(xstart+nbcol) ) {
// on est dans le segment à lire
if (nb>nbcol) {
// le segment dépasse
if ( consumed==0 ) {
// on a pas encore lu de points dans le segment
currentconsumed=nbcol;
}
else {
// à partir de la ou on en était le coup précédent
currentconsumed=nbcol-xbloc;
}
// le segment peut couvrir plusieurs lignes
if ( xstart=0 && xstart+=nbcol==width) {
// ça n'a une importance que si le bloc est sur toute la largeur de l'image
int remain=segment.n-consumed-currentconsumed;
int seglig=remain/nbcol; // division entière pour connaitre le nombre de ligne à lire
int nbligblock=(ystart+nbrow)-cursor.y; // nombre de lignes qu'il reste à lire pour le block
if ( seglig>nbligblock ) {
// on récupère au maximum les lignes pour le bloc
currentconsumed+=nbligblock*nbcol; // on lit toute les lignes nécessaires
// il reste un petit bout à la fin du segment qui fait partie du bloc
remain=segment.n-consumed-currentconsumed;
if ( remain<nbcol ) {
currentconsumed+=nbcol;
}
}
else {
currentconsumed=segment.n-consumed; // tout ce qui reste doit aller dans le segment
}
}
}
else {
// tous les points qu'il reste dans le segment sont dans la ligne
currentconsumed=nb-consumed;
}
newimage.add(new Segment(segment.r,segment.g,segment.b,pointread));
}
}
cursor.x+=currentconsumed;
while ( cursor.X>=width ) {
cursor.y++;
cursor.x=-=width;
}
return consumed+currentconsumed;
} |