Exemplo n.º 1
0
int main(int argc,char *argv[])
{
	if (argc==2 && (strcmp(argv[1],"-help")==0))
	{
		showHelp();
		return 0;
	}
	if (argc!=4) 
	{		
		Warning("Zle zadane argumenty\n");
		showHelp();
		return 1;
	}
	struct ppm *ppmFile=ppm_read(argv[1]);
	if (ppmFile==NULL)
	{
		FatalError("Chyba citania zo suboru");
		return 1;
	}
	EncodeMessage(ppmFile,argv[3]);
	if (ppm_write(ppmFile,argv[2])!=0)
	{
		free(ppmFile);
		Warning("Zapis do suboru sa nepodaril");
		return 1;
	}
	free(ppmFile);
	return 0;
}
Exemplo n.º 2
0
static int
load_ppm (app_t *self, const char *filename) 
{
    FILE *fp = fopen (filename, "rb");
    if (!fp) { perror ("fopen"); return -1; }
    int status = ppm_read (fp, &self->img, &self->img_width, &self->img_height,
            &self->img_stride);
    fclose (fp);
    return status;
}
Exemplo n.º 3
0
int main(int argc, const char* argv[])
{
	if (argc != 2) {
		FatalError("Neplatne argumenty programu!");
	}

	struct ppm* image = ppm_read(argv[1]);
	if (!image) {
		return EXIT_FAILURE;
	}

	BA_create(bit_array, N); 
	Eratosthenes(bit_array);

	int ch, nbits; 
	ch = nbits = 0; 

	unsigned long image_size = image->xsize * image->ysize * 3;
	for (unsigned long i = 2; i < image_size; i++) {
		
		if (BA_get_bit(bit_array, i) == 0) {

			/** :) kdyz najdeme prvocislo tak to znamena ze 
			 * v poli image->data mame v LSB bitu v bajtu 
			 * na indexu i ulozeny jeden bit znaku zakodovane
			 * zpravy
			 */ 

			// n-ty bit (nbits) znaku (ch) nastavime na hodnotu LSB bitu
			// prvociselne polozky pole image->data
         		DU1_SET_BIT((&ch), nbits, DU1_GET_BIT((&image->data[i]), 0));

			if((++nbits) == CHAR_BIT) { // mame j*z cely znak? 

				if (ch == 0) {  
					break; 
				} else if (isprint(ch)) {
					printf("%c", ch);
					nbits = 0; 
				} else {  
					FatalError("Zprava obsahuje netisknutelny znak!");
				}
			}
		}	
	}

	free(image);

	return EXIT_SUCCESS; 	
}
Exemplo n.º 4
0
void
ppm_printf(struct ppm * ppm)
{
	int i, j;
	color_t color;

	for(i = 0; i < ppm->height; i++)
	{
		for(j = 0; j < ppm->width; j++)
			{
				color = ppm_read(ppm, j, i);
				printf("(%'3d, %'3d) %'3d %'3d %'3d;", j, i, color.red, color.green, color.blue);
			}
		printf("\n");
	}
}
Exemplo n.º 5
0
/*
 * pic_read: read a TIFF or PPM file into memory.
 * Normally, you should use opic==NULL.
 * If opic!=NULL, then picture is read into opic->pix (after checking that
 * size is sufficient), else a new Pic is allocated.
 * Returns Pic pointer on success, NULL on failure.
 */
Pic *pic_read(char *file, Pic *opic)
{
  switch( pic_file_type(file) )
  {
    case PIC_TIFF_FILE:
      //return tiff_read(file, opic);
    break;
			
    case PIC_PPM_FILE:
      return ppm_read(file, opic);
    break;

    case PIC_JPEG_FILE:
      //return jpeg_read(file, opic);
    break;

    default:
      return NULL;
    }
}
Exemplo n.º 6
0
icv_image_t *
icv_read(const char *filename, int format, int width, int height)
{
    if (format == ICV_IMAGE_AUTO) {
	/* do some voodoo with the file magic or something... */
	format = ICV_IMAGE_PIX;
    }

    switch (format) {
	case ICV_IMAGE_PIX:
	    return pix_read(filename, width, height);
	case ICV_IMAGE_BW :
	    return bw_read(filename, width, height);
	case ICV_IMAGE_DPIX :
	    return dpix_read(filename, width, height);
	case ICV_IMAGE_PPM :
	    return ppm_read(filename);
	default:
	    bu_log("icv_read not implemented for this format\n");
	    return NULL;
    }
}
Exemplo n.º 7
0
Arquivo: qtienc.c Projeto: 50m30n3/QTC
int main( int argc, char *argv[] )
{
	struct image image;
	struct qti compimage;
	struct tilecache *cache;

	int opt, verbose;
	unsigned long int insize, bsize, outsize;
	unsigned long int cacheblocks, cachehits;
	int transform, colordiff;
	int rangecomp;
	int minsize;
	int maxdepth;
	int lazyness;
	int cachesize;
	char *infile, *outfile;

	verbose = 0;
	transform = 0;
	colordiff = 0;
	rangecomp = 0;
	minsize = 2;
	maxdepth = 16;
	cachesize = 0;
	lazyness = 0;
	infile = NULL;
	outfile = NULL;

	while( ( opt = getopt( argc, argv, "hevy:t:s:d:c:l:i:o:" ) ) != -1 )
	{
		switch( opt )
		{
			case 'h':
				print_help();
				return 0;
			break;

			case 't':
				if( sscanf( optarg, "%i", &transform ) != 1 )
					fputs( "main: Can not parse command line: -t\n", stderr );
			break;

			case 'e':
				rangecomp = 1;
			break;

			case 'y':
				if( sscanf( optarg, "%i", &colordiff ) != 1 )
					fputs( "main: Can not parse command line: -y\n", stderr );
			break;

			case 'v':
				verbose = 1;
			break;

			case 's':
				if( sscanf( optarg, "%i", &minsize ) != 1 )
					fputs( "main: Can not parse command line: -s\n", stderr );
			break;

			case 'd':
				if( sscanf( optarg, "%i", &maxdepth ) != 1 )
					fputs( "main: Can not parse command line: -d\n", stderr );
			break;

			case 'c':
				if( sscanf( optarg, "%i", &cachesize ) != 1 )
					fputs( "main: Can not parse command line: -c\n", stderr );
			break;

			case 'l':
				if( sscanf( optarg, "%i", &lazyness ) != 1 )
					fputs( "main: Can not parse command line: -l\n", stderr );
			break;

			case 'i':
				infile = strdup( optarg );
			break;

			case 'o':
				outfile = strdup( optarg );
			break;

			default:
			case '?':
				fputs( "main: Can not parse command line: unknown option\n", stderr );
				return 1;
			break;
		}
	}

	if( ( transform < 0 ) || ( transform > 2 ) )
	{
		fputs( "main: Transform mode out of range\n", stderr );
		return 1;
	}

	if( ( colordiff < 0 ) || ( colordiff > 2 ) )
	{
		fputs( "main: Fakeyuv mode out of range\n", stderr );
		return 1;
	}

	if( minsize < 0 )
	{
		fputs( "main: Mininmal block size out of range\n", stderr );
		return 1;
	}

	if( maxdepth < 0 )
	{
		fputs( "main: Maximum recursion depth out of range\n", stderr );
		return 1;
	}

	if( cachesize < 0 )
	{
		fputs( "main: Cache size out of range\n", stderr );
		return 1;
	}

	if( lazyness < 0 )
	{
		fputs( "main: Lazyness recursion depth out of range\n", stderr );
		return 1;
	}

	if( ! ppm_read( &image, infile ) )		// Read the input image
		return 2;

	insize = image.width * image.height * 3;

	if( colordiff >= 1 )		// Apply fakeyuv transform
		image_color_diff( &image );

	if( transform == 1 )		// Apply image transforms
		image_transform_fast( &image );
	else if( transform == 2 )
		image_transform( &image );

	if( cachesize > 0 )
		cache = tilecache_create( cachesize*1024, minsize );		// Create tile cache
	else
		cache = NULL;

	if( ! qti_create( &compimage, image.width, image.height, minsize, maxdepth, cache ) )
		return 2;

	if( ! qtc_compress( &image, NULL, &compimage, lazyness, colordiff >= 2 ) )		// Compress the image
		return 2;

	bsize = qti_getsize( &compimage );

	if( ! ( outsize = qti_write( &compimage, rangecomp, outfile ) ) )		// Write image to file
		return 2;
	
	image_free( &image );
	qti_free( &compimage );
	
	if( cache != NULL )
	{
		cacheblocks = cache->numblocks;
		cachehits = cache->hits;
		tilecache_free( cache );
	}
	else
	{
		cacheblocks = 0;
		cachehits = 0;
	}
	
	if( verbose )
		fprintf( stderr, "In:%luB Buff:%luB,%f%% Cache:%lu/%lu,%f%% Out:%luB,%f%%\n",
		         insize, bsize/8, (bsize/8)*100.0/insize,
		         cachehits, cacheblocks, cachehits*100.0/cacheblocks,
		         outsize, outsize*100.0/insize );

	free( infile );
	free( outfile );

	return 0;
}
Exemplo n.º 8
0
int main(int argc, char *argv[])
{
	if (argc == 2)				// ak nie je zadany chybny pocet argumentov
	{
		struct ppm *picture = ppm_read(argv[1]);  // nacitanie struktury
		char sprava = 0,index2=0,bit;
		unsigned long index;
		int nullbyte = 0;
		
		if (picture == NULL) 			// ak nacitanie skoncilo s chybou
			FatalError("Chybne zadany subor\n");
		
		BitArray(bitmap,LIMIT);   // iniciaizacia bit. pola
	
		Eratosthenes(bitmap);   // vypocet prvociselnych indexov
			
		for (index=2;index <= (LIMIT); index++)	
		{
			if (GetBit(bitmap,index) == 0)   // prvociselny index
			{	
				bit = DU1_GET_BIT((&(picture->data)[index+1]),0); // vyber LSB z bytu
				DU1_SET_BIT((&sprava),index2,bit);				  // nastav na nasledujuci index vybrany bit
												
				if (index2 < (BYTE - 1))							  // ci uz nie je zaplneny cely byte
				{
					index2++;
				} 
					else if ((sprava != '\0') && (isprint(sprava)))   // ak nie je znak nulovy alebo netlacitelny
					{
						printf("%c",sprava);						  // vytlaci 1 znak zo spravy
						index2 = 0; 								  // vynulue pocet nast. bitov a znak
						sprava = 0;
					}
						else if (sprava == '\0')					 // ak je znak nulovy -> koniec spravy
						{
							printf("\n");
							nullbyte = 1;
							break;
						}
						else                						// ak je znak netlacitelny -> fatal error
							{									
								free(picture);
								FatalError("Sprava ulozena v subore: %s nie je korektna\n",argv[1]);
							}
			}		
		}
		
	if (nullbyte == 0)
	{
		free(picture);
		FatalError("Sprava ulozena v subore: %s nie je korektne ukoncena\n",argv[1]);
		return 1;
	} else
		{
			free(picture);													// uvolnenie alokovanej pamate
			return 0;
		}
		
	} else
		{
			FatalError("Nespravne zadane argumenty\n");
			return 1;
		}
	
	
}
Exemplo n.º 9
0
Arquivo: kmeans.c Projeto: aumgn/Cours
int main(int argc, char* argv[]) {
    /* Arguments */
    if (argc != 3 ) {
        printf("\nUsage: %s <file> <clusters count> \n\n", argv[0]);
        return 0;
    }

    ppm_t* src = ppm_read(argv[1]);
    int clusters_count = atoi(argv[2]);
    if (clusters_count < 2) {
        printf("\nParameter <clusters count> must be greater than 1 (got %s)\n", argv[2]);
        return 0;   
    }

    cluster_data* clusters = malloc(clusters_count * sizeof(cluster_data));
    for (int i = 0; i < clusters_count; i++) {
        clusters[i].count = 0;
        clusters[i].red_sum = 0;
        clusters[i].green_sum = 0;
        clusters[i].blue_sum = 0;
        // Choose initial cluster centers randomly
        clusters[i].center = (color) {
            rand() % src->maxval,
            rand() % src->maxval,
            rand() % src->maxval
        };
    }
    /*
    // Forced initial three
    clusters[0].center = (color) { 255, 83, 201 };
    clusters[1].center = (color) { 222, 219, 64 };
    clusters[2].center = (color) { 0, 0, 0 };
    */

    int* pixel_cluster = malloc(src->cols * src->rows * sizeof(int));
    for (;;) {
        bool modified = false;

        for (int i = 0; i < src->rows; i++) {
            for (int j = 0; j < src->cols; j++) {
                color c = PPM_AT(src, i, j);
                int min_distance_sq = INT_MAX;
                int min_cluster = -1;
                for (int cluster = 0; cluster < clusters_count; cluster++) {
                    color center = clusters[cluster].center;
                    int dred = center.red - c.red;
                    int dgreen = center.green - c.green;
                    int dblue = center.blue - c.blue;
                    int distance_sq = dred * dred + dgreen * dgreen + dblue * dblue;
                    if (distance_sq < min_distance_sq) {
                        min_cluster = cluster;
                        min_distance_sq = distance_sq;
                    }
                }

                if (pixel_cluster[i * src->cols + j] != min_cluster) {
                    pixel_cluster[i * src->cols + j] = min_cluster;
                    modified = true;
                }

                clusters[min_cluster].count++;
                clusters[min_cluster].red_sum += c.red;
                clusters[min_cluster].green_sum += c.green;
                clusters[min_cluster].blue_sum += c.blue;
            }
        }

        if (!modified) {
            break;
        }

        for (int i = 0; i < clusters_count; i++) {
            if (clusters[i].count > 0)  {
                clusters[i].center.red = clusters[i].red_sum;
                clusters[i].center.red /= clusters[i].count;
                clusters[i].center.green = clusters[i].green_sum / clusters[i].count;
                clusters[i].center.blue = clusters[i].blue_sum / clusters[i].count;
            }
            clusters[i].count = 0;
            clusters[i].red_sum = 0;
            clusters[i].green_sum = 0;
            clusters[i].blue_sum = 0;
        }
    }

    ppm_t* dst = ppm_create_empty(src->cols, src->rows, src->maxval);
    for (int i = 0; i < src->rows; i++) {
        for (int j = 0; j < src->cols; j++) {
            int cluster = pixel_cluster[i * src->cols + j];
            PPM_AT(dst, i, j) = clusters[cluster].center;
        }
    }

    ppm_write(dst, true);

    return 0;
}