C-Code für Random Problem
von MSfree- SNIPPET_TEXT:
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- #include "jpeglib.h"
- #include <setjmp.h>
- /* simple jpeg writer */
- static void write_JPEG_file( char * filename, int quality, JSAMPLE * image_buffer,
- int image_height, int image_width, int samples_per_pixel )
- {
- struct jpeg_compress_struct cinfo;
- struct jpeg_error_mgr jerr;
- FILE * outfile;
- JSAMPROW row_pointer[1];
- int row_stride;
- cinfo.err = jpeg_std_error(&jerr);
- jpeg_create_compress(&cinfo);
- if((outfile = fopen(filename, "wb")) == NULL) {
- fprintf(stderr, "can't open %s\n", filename);
- exit(1);
- }
- jpeg_stdio_dest(&cinfo, outfile);
- cinfo.image_width = image_width;
- cinfo.image_height = image_height;
- cinfo.input_components = samples_per_pixel;
- cinfo.in_color_space = ( samples_per_pixel == 1 ) ? ( JCS_GRAYSCALE ) : ( JCS_RGB );
- jpeg_set_defaults(&cinfo);
- jpeg_set_quality(&cinfo, quality, TRUE );
- jpeg_start_compress(&cinfo, TRUE);
- row_stride = image_width * samples_per_pixel;
- while(cinfo.next_scanline < cinfo.image_height) {
- row_pointer[0] = & image_buffer[cinfo.next_scanline * row_stride];
- (void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
- }
- jpeg_finish_compress(&cinfo);
- fclose(outfile);
- jpeg_destroy_compress(&cinfo);
- }
- /* random function */
- double MyRandom( double Bereich )
- {
- double rNum = ( (double) rand() / (double) RAND_MAX ) * Bereich;
- return rNum;
- }
- /********************/
- void GeneratePoints( int numPts, double *x, double *y )
- {
- int i;
- for( i=0 ; i<numPts ; i++)
- {
- double winkel= MyRandom( 360.0 );
- double radius= MyRandom( 200.0 );
- x[i] = sin( winkel * (M_PI / 180.0) ) * radius;
- y[i] = cos( winkel * (M_PI / 180.0) ) * radius;
- }
- }
- /********************/
- void DrawDots( int numPts, double *x, double *y,
- unsigned char *buffer, int bufWidth, int bufHeight )
- {
- double minX, minY, maxX, maxY, scaleX, scaleY, scale;
- int i;
- minX = x[0];
- minY = y[0];
- maxX = x[0];
- maxY = y[0];
- for( i=1 ; i<numPts ; i++)
- {
- if( minX > x[i] ) minX = x[i];
- if( minY > y[i] ) minY = y[i];
- if( maxX < x[i] ) maxX = x[i];
- if( maxY < y[i] ) maxY = y[i];
- }
- scaleX = (double) bufWidth / ( maxX - minX );
- scaleY = (double) bufHeight / ( maxY - minY );
- scale = ( scaleX > scaleY ) ? ( scaleX ) : ( scaleY );
- memset( buffer, 0, bufWidth * bufHeight );
- for( i=0 ; i<numPts ; i++)
- {
- int col = ( ( x[i] - minX ) / scale + 0.5 );
- int row = ( ( y[i] - minY ) / scale + 0.5 );
- buffer[ row * bufWidth + col ] = 255;
- }
- }
- /********************/
- int main( int argc, char *argv[] )
- {
- unsigned char *buffer;
- int bufDim = 400;
- int numPts = 10000;
- double *x, *y;
- x = (double *) malloc( numPts * sizeof( double ) );
- y = (double *) malloc( numPts * sizeof( double ) );
- buffer = (unsigned char *) malloc( bufDim*bufDim * sizeof( unsigned char ) );
- GeneratePoints( numPts, x, y );
- DrawDots( numPts, x, y, buffer, bufDim, bufDim );
- write_JPEG_file( "test.jpg", 85, (JSAMPLE *) buffer, bufDim, bufDim, 1 );
- }
Quellcode
Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN