Bitmap/Histogram: Difference between revisions
Content added Content deleted
(Updated D entry) |
(→{{header|Vedit macro language}}: Added zkl) |
||
Line 1,168: | Line 1,168: | ||
} |
} |
||
Return</lang> |
Return</lang> |
||
=={{header|zkl}}== |
|||
{{trans|C}} |
|||
Uses the PPM class from http://rosettacode.org/wiki/Bitmap/Bresenham%27s_line_algorithm#zkl |
|||
<lang zkl>fcn histogram(image){ |
|||
hist:=(256).pump(List(),0); |
|||
image.data.pump(0,Void,'wrap(c){ hist[c]+=1 }); |
|||
hist; |
|||
} |
|||
fcn histogramMedian(hist){ |
|||
from,to:=0,(2).pow(8) - 1; // 16 bits of luminance |
|||
left,right:=hist[from],hist[to]; |
|||
while(from!=to){ |
|||
if(left<right){ from+=1; left +=hist[from]; } |
|||
else { to -=1; right+=hist[to]; } |
|||
} |
|||
from |
|||
}</lang> |
|||
<lang zkl>fcn readPPMFile(fileName){ |
|||
image:=File(f:=fileName,"rb").read(); f.close(); |
|||
image.readln(2); |
|||
w,h:=image.readln().split().apply("toInt"); |
|||
image.del(0,image.find("\n255\n") + 5);// del PPM header |
|||
ppm:=PPM(w,h); |
|||
ppm.data.clear(); // gonna write file image data |
|||
// image is stored upside down |
|||
[h-1..0, -1].pump(ppm.data,'wrap(h){ image.seek(3*h*w); image.read(3*w) }); |
|||
ppm |
|||
} |
|||
img:=readPPMFile("lenaGrey.ppm"); // a grey scale image |
|||
median:=histogramMedian(histogram(img)); |
|||
median.println(); |
|||
bw:=PPM(img.w,img.h); |
|||
// stream bytes from orginal, convert to black/white, write to new image |
|||
// each pixel is 24 bit RGB |
|||
img.data.pump(0,bw.data.clear(),'wrap(c){ if(c>median) 0xff else 0 }); |
|||
bw.write(File("foo.ppm","wb"));</lang>lenaBW.jpg |
|||
{{out}}<pre>101</pre> |
|||
http://home.comcast.net/~zenkinetic/Images/lenaBW.jpg |
|||
{{omit from|PARI/GP}} |
{{omit from|PARI/GP}} |