Warning: session_start(): open(/var/lib/php/sessions/sess_6r4erulfavi7157ss1cn759k64, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
srecord noeq GazelleVScript(S text) {
LS tok;
sS helpText = mlsUnindent([[
1p, 2p etc: Scale image down to x pixels
1c, 2c, ..., 256c: Reduce gray scale levels
1w, 2w etc: Scale image width only to x pixels
]]);
class Run is Steppable {
ListAndIndex ptr; // where are we in the script
new Stack stack;
// main variables
IBWIntegralImage integralImage;
settable BWImage bwImage;
selfType setIntegralImage(IBWIntegralImage ii) {
push(integralImage = ii);
this;
}
*() {
parse();
ptr = ListAndIndex(tok, 1);
}
void push(O o) { stack.add(o); }
O value() { ret last(stack); }
public bool step() {
S token = ptr!;
if (token == null) false;
next();
if (isInteger(token)) {
int i = parseInt(token);
S token2 = tpp();
if (eqic(token2, "p"))
scaleToHeight(i);
else if (eqic(token2, "c"))
posterize(i);
else if (eqic(token2, "w"))
scaleWidthOnly(i);
else
warn("Unknown token: " + token);
} else {
warn("Unknown token: " + token);
}
true;
}
S tpp() { var token = ptr!; next(); ret token; }
void next { if (!ptr.atEnd()) ptr = ptr.plus(2); }
// operations
void scaleToHeight(int pixelRows) {
pixelRows = min(pixelRows, 512);
if (integralImage == null)
ret with warn("No integral image to scale down");
push(bwImage = scaledBWImageFromBWIntegralImage_withMeta_height(pixelRows, integralImage));
}
void posterize(int colors) {
colors = clamp(colors, 2, 256);
if (bwImage == null)
ret with warn("No image to posterize");
else
push(bwImage = posterizeBWImage_withMeta(colors, bwImage));
}
IBWIntegralImage bwIntegralImage() {
O val = value();
if (val cast IBWIntegralImage) ret val;
if (val cast BWImage) {
var ii = main bwIntegralImage(val);
setIntegralImage(ii);
ret ii;
}
fail("Not an image on stack");
}
void scaleWidthOnly(int w) {
var ii = bwIntegralImage();
push(bwImage = scaledBWImageFromBWIntegralImage_withMeta(
ii, w, ii.getHeight());
}
// end of operations
O result() {
ret or(bwImage, integralImage);
}
run { stepAll(this); }
}
void parse() {
tok if null = javaTok(text);
}
}