cjpeg.bak
Home
/
application /
ImgGen /
ImgFiles /
RestFiles /
cjpeg.bak
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
#include "jversion.h" /* for version message */
#include <math.h>
#include <time.h>
int main (int argc, char **argv)
{
struct jpeg_compress_struct cinfo;
struct jpeg_error_mgr jerr;
int k, dim, i;
FILE * outfile;
char *row_pointer;
if(argc != 3) {
printf("Usage: %s <size of image in k> <image name>.jpg\n", argv[0]);
exit(0);
}
k = atoi(argv[1]);
if(k<0)
k=1;
/* Create output image. */
dim = (int)sqrt( ((k*1024)-635)/2 );
printf("size ~= %d bytes, dimension = %d\n", k*1024, dim);
row_pointer = malloc(dim*3*sizeof(char));
/* Initialize the JPEG compression object with default error handling. */
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_compress(&cinfo);
/* Specify data destination for compression */
if((outfile = fopen(argv[2], "wb")) == NULL) {
printf("Can't open file...\n");
exit(1);
}
jpeg_stdio_dest(&cinfo, outfile);
/* Initialize JPEG parameters.
* Much of this may be overridden later.
* In particular, we don't yet know the input file's color space,
* but we need to provide some value for jpeg_set_defaults() to work.
*/
cinfo.in_color_space = JCS_RGB; /* arbitrary guess */
cinfo.image_width = dim;
cinfo.image_height = dim;
cinfo.input_components = 3;
jpeg_set_defaults(&cinfo);
jpeg_set_quality(&cinfo, 9999, TRUE);
srand( (unsigned)time( NULL ) );
/* Start compressor */
jpeg_start_compress(&cinfo, TRUE);
/* Process data */
while (cinfo.next_scanline < cinfo.image_height) {
/* randomize the dots */
int position;
for(i=0; i<dim; i++) {
position = i * 3;
row_pointer[position] = (char)rand()%256;
row_pointer[position+1] = (char)rand()%256;
row_pointer[position+2] = (char)rand()%256;
}
(void) jpeg_write_scanlines(&cinfo, &row_pointer, 1);
}
gdImageChar();
/* Finish compression and release memory */
jpeg_finish_compress(&cinfo);
jpeg_destroy_compress(&cinfo);
if (outfile != stdout)
fclose(outfile);
/* All done. */
exit(jerr.num_warnings ? EXIT_WARNING : EXIT_SUCCESS);
return 0; /* suppress no-return-value warnings */
}
void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y,
int c, int color)
{
int cx, cy;
int px, py;
int fline;
cx = 0;
cy = 0;
if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
return;
}
fline = (c - f->offset) * f->h * f->w;
for (py = y; (py < (y + f->h)); py++) {
for (px = x; (px < (x + f->w)); px++) {
if (f->data[fline + cy * f->w + cx]) {
gdImageSetPixel(im, px, py, color);
}
cx++;
}
cx = 0;
cy++;
}
}