Skip to content

Commit 0f6d37b

Browse files
committed
c ompilatio works, blank image
1 parent 0c1d9c6 commit 0f6d37b

File tree

3 files changed

+152
-26
lines changed

3 files changed

+152
-26
lines changed

create_fractal.c

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,3 @@
1-
/* Python
2-
def create_fractal(image, width, height, iters):
3-
pixel_size_x = 3.0 / width
4-
pixel_size_y = 2.0 / height
5-
for y in range(height):
6-
imag = y * pixel_size_y - 1
7-
yy = y*width
8-
for x in range(width):
9-
real = x * pixel_size_x - 2
10-
color = mandel(real, imag, iters)
11-
image[yy+x] = color
12-
13-
*/
14-
151
int mandel(int x, int y, int max_iters, unsigned char * val);
162

173
void create_fractal(unsigned char * image, int width, int height,
@@ -28,3 +14,4 @@ void create_fractal(unsigned char * image, int width, int height,
2814
image[yy + x] = color;
2915
}
3016
}
17+
}

main.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
#include <stdio.h>
2+
#include <pbm.h>
23

34
int mandel(int x, int y, int max_iters, unsigned char * val);
45

56
void create_fractal(unsigned char * image, int width, int height,
67
int iters);
78

8-
int write_pbm(unsigned char * image, int width, int height, char * fname)
9-
{
10-
int cnt;
11-
FILE * fid = fopen(fname, "wb");
12-
if (NULL == fid)
13-
return -1;
14-
cnt = f
15-
}
169
int main(int argc, const char *argv[], const char * env[])
1710
{
11+
int width = 1500;
12+
int height = 1000;
13+
int iters = 20;
14+
FILE * fid = NULL;
15+
unsigned char * image = (unsigned char*)malloc(width*height);
16+
if (NULL == image)
17+
return -1;
18+
fid = fopen("c.pbm", "wb");
19+
if (NULL == fid)
20+
return -2;
21+
create_fractal(image, width, height, iters);
22+
pbm_writepbminit(fid, width, height, 0);
23+
for (int i=0; i<height; i++)
24+
pbm_writepbmrow(fid, image + width*i, width, 0);
25+
fclose(fid);
1826
return 0;
1927
}

pycon2017_cffi.ipynb

Lines changed: 135 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@
191191
},
192192
{
193193
"cell_type": "code",
194-
"execution_count": 43,
194+
"execution_count": 47,
195195
"metadata": {},
196196
"outputs": [
197197
{
@@ -243,16 +243,147 @@
243243
"cat mandel.c"
244244
]
245245
},
246+
{
247+
"cell_type": "code",
248+
"execution_count": 48,
249+
"metadata": {},
250+
"outputs": [
251+
{
252+
"name": "stdout",
253+
"output_type": "stream",
254+
"text": [
255+
"/* Python\n",
256+
"def create_fractal(image, width, height, iters):\n",
257+
" pixel_size_x = 3.0 / width\n",
258+
" pixel_size_y = 2.0 / height\n",
259+
" for y in range(height):\n",
260+
" imag = y * pixel_size_y - 1\n",
261+
" yy = y*width\n",
262+
" for x in range(width):\n",
263+
" real = x * pixel_size_x - 2\n",
264+
" color = mandel(real, imag, iters)\n",
265+
" image[yy+x] = color\n",
266+
"\n",
267+
"*/\n",
268+
"\n",
269+
"int mandel(int x, int y, int max_iters, unsigned char * val);\n",
270+
"\n",
271+
"void create_fractal(unsigned char * image, int width, int height, \n",
272+
" int iters) {\n",
273+
" float pixel_size_x = 3.0 / width;\n",
274+
" float pixel_size_y = 2.0 / height;\n",
275+
" for (int y=0; y<height; y++) {\n",
276+
" float imag = y * pixel_size_y - 1;\n",
277+
" int yy = y * width;\n",
278+
" for (int x=0; x<width; x++) {\n",
279+
" float real = x * pixel_size_x - 2;\n",
280+
" unsigned char color;\n",
281+
" int ret = mandel(real, imag, iters, &color);\n",
282+
" image[yy + x] = color;\n",
283+
" }\n",
284+
" }\n"
285+
]
286+
}
287+
],
288+
"source": [
289+
"%%bash \n",
290+
"cat create_fractal.c"
291+
]
292+
},
293+
{
294+
"cell_type": "code",
295+
"execution_count": 49,
296+
"metadata": {},
297+
"outputs": [
298+
{
299+
"name": "stdout",
300+
"output_type": "stream",
301+
"text": [
302+
"#include <stdio.h>\n",
303+
"#include <pbm.h>\n",
304+
"\n",
305+
"int mandel(int x, int y, int max_iters, unsigned char * val);\n",
306+
"\n",
307+
"void create_fractal(unsigned char * image, int width, int height, \n",
308+
" int iters);\n",
309+
"\n",
310+
"int main(int argc, const char *argv[], const char * env[])\n",
311+
"{\n",
312+
" int width = 1500;\n",
313+
" int height = 1000;\n",
314+
" FILE * fid = NULL;\n",
315+
" unsigned char * image = (unsinged char*)malloc(width*height);\n",
316+
" if (NULL == image)\n",
317+
" return -1;\n",
318+
" fid = fopen(\"c.pbm\", \"wb\");\n",
319+
" if (NULL == fid)\n",
320+
" return -2;\n",
321+
" create_fractal(image, width, height);\n",
322+
" pbm_writepbminit(fid, width, height, 0);\n",
323+
" for (int i=0; i<height; i++)\n",
324+
" pbm_writebpmrow(fid, image + width*i, width, 0);\n",
325+
" fclose(fid);\n",
326+
" return 0;\n",
327+
"}\n"
328+
]
329+
}
330+
],
331+
"source": [
332+
"%%bash\n",
333+
"cat main.c"
334+
]
335+
},
336+
{
337+
"cell_type": "code",
338+
"execution_count": 54,
339+
"metadata": {},
340+
"outputs": [
341+
{
342+
"name": "stderr",
343+
"output_type": "stream",
344+
"text": [
345+
"\n",
346+
"real\t0m0.454s\n",
347+
"user\t0m0.452s\n",
348+
"sys\t0m0.000s\n"
349+
]
350+
}
351+
],
352+
"source": [
353+
"%%bash\n",
354+
"gcc -O3 mandel.c create_fractal.c main.c -lnetpbm -o create_fractal\n",
355+
"time ./create_fractal"
356+
]
357+
},
358+
{
359+
"cell_type": "code",
360+
"execution_count": 55,
361+
"metadata": {},
362+
"outputs": [
363+
{
364+
"data": {
365+
"image/png": "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\n",
366+
"text/plain": [
367+
"<matplotlib.figure.Figure at 0x7f3339268b50>"
368+
]
369+
},
370+
"metadata": {},
371+
"output_type": "display_data"
372+
}
373+
],
374+
"source": [
375+
"img = Image.open('c.pbm')\n",
376+
"imshow(img); show()"
377+
]
378+
},
246379
{
247380
"cell_type": "code",
248381
"execution_count": null,
249382
"metadata": {
250383
"collapsed": true
251384
},
252385
"outputs": [],
253-
"source": [
254-
"%bash cat "
255-
]
386+
"source": []
256387
}
257388
],
258389
"metadata": {

0 commit comments

Comments
 (0)