Munching squares: Difference between revisions
(→{{header|PHP}}: Added PureBasic) |
(→{{header|PureBasic}}: Resized picture sample) |
||
Line 240: | Line 240: | ||
[[File:xor_pattern_php.png|PHP output|200px]] |
[[File:xor_pattern_php.png|PHP output|200px]] |
||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |
||
⚫ | |||
<lang purebasic>#palletteSize = 128 |
<lang purebasic>#palletteSize = 128 |
||
Procedure.f XorPattern(x, y) ;compute the gradient value from the pixel values |
Procedure.f XorPattern(x, y) ;compute the gradient value from the pixel values |
||
Line 267: | Line 266: | ||
Until event = #PB_Event_CloseWindow |
Until event = #PB_Event_CloseWindow |
||
EndIf</lang> |
EndIf</lang> |
||
⚫ | |||
=={{header|Tcl}}== |
=={{header|Tcl}}== |
Revision as of 00:14, 1 December 2011
Render a graphical pattern where each pixel is colored by the value of 'x xor y' from a color table.
C
<lang c>#include <stdlib.h>
- include <stdio.h>
- include <math.h>
- include <string.h>
void hue_to_rgb(double hue, double sat, unsigned char *p) { double x; int c = 255 * sat; hue /= 60; x = (1 - fabs(fmod(hue, 2) - 1)) * 255;
switch((int)hue) { case 0: p[0] = c; p[1] = x; p[2] = 0; return; case 1: p[0] = x; p[1] = c; p[2] = 0; return; case 2: p[0] = 0; p[1] = c; p[2] = x; return; case 3: p[0] = 0; p[1] = x; p[2] = c; return; case 4: p[0] = x; p[1] = 0; p[2] = c; return; case 5: p[0] = c; p[1] = 0; p[2] = x; return; } }
int main(void) { const int size = 512; int i, j; unsigned char *colors = malloc(size * 3); unsigned char *pix = malloc(size * size * 3), *p; FILE *fp;
for (i = 0; i < size; i++) hue_to_rgb(i * 240. / size, i * 1. / size, colors + 3 * i);
for (i = 0, p = pix; i < size; i++) for (j = 0; j < size; j++, p += 3) memcpy(p, colors + (i ^ j) * 3, 3);
fp = fopen("xor.ppm", "wb"); fprintf(fp, "P6\n%d %d\n255\n", size, size); fwrite(pix, size * size * 3, 1, fp); fclose(fp);
C#
<lang csharp>using System.Drawing; using System.Drawing.Imaging; using System.Linq;
class XORPattern {
static void Main() { var size = 0x100; var black = Color.Black.ToArgb(); var palette = Enumerable.Range(black, size).Select(Color.FromArgb).ToArray(); using (var image = new Bitmap(size, size)) { for (var x = 0; x < size; x++) { for (var y = 0; y < size; y++) { image.SetPixel(x, y, palette[x ^ y]); } } image.Save("XORPatternCSharp.png", ImageFormat.Png); } }
}</lang> Output:
D
<lang d>import std.stdio;
void main() {
enum width = 512, height = 512;
auto f = File("xor_pattern.ppm", "wb"); f.writefln("P6\n%d %d\n255", width, height); foreach (y; 0 .. height) foreach (x; 0 .. width) { ubyte c = (x ^ y) & ubyte.max; ubyte[3] rgb = [255 - c, c / 2, c]; f.rawWrite(rgb); }
}</lang>
Gnuplot
<lang gnuplot>set pm3d map set size square set isosamples 255,255 splot [0:255][0:255]-(floor(x)^floor(y))</lang>
Java
This example will repeat the pattern if you expand the window. <lang java>import java.awt.Color; import java.awt.Graphics;
import javax.swing.JFrame; import javax.swing.JPanel;
public class XorPattern extends JFrame{
private JPanel xorPanel;
public XorPattern(){ xorPanel = new JPanel(){ @Override public void paint(Graphics g) { for(int y = 0; y < XorPattern.this.xorPanel.getHeight();y++){ for(int x = 0; x < XorPattern.this.xorPanel.getWidth();x++){ g.setColor(new Color(0, (x ^ y) % 256, 0)); g.drawLine(x, y, x, y); } } } }; add(xorPanel); setSize(300, 300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }
public static void main(String[] args){ new XorPattern(); }
Mathematica
<lang Mathematica>ListDensityPlot[
Table[Table[ FromDigits[BitXor[IntegerDigits[x, 2, 8], IntegerDigits[y, 2, 8]], 2], {x, 0, 255}], {y, 0, 255}]]</lang>
Output #1:
<lang Mathematica>ArrayPlot[Array[BitXor, {511, 511}]]</lang> Output #2:
MATLAB
<lang matlab>size = 255; x = [0:1:size]; y = [0:1:size];
colormap bone(256);
for i=1:1:size+1,
for j=1:1:size+1, c(i,j) = bitxor(x(i),y(j)); end
end
OCaml
<lang ocaml>open Graphics
let () =
open_graph ""; resize_window 256 256; for y = 0 to pred (size_y()) do for x = 0 to pred (size_x()) do let v = (x lxor y) land 0xFF in set_color (rgb v (255 - v) 0); plot x y done; done; ignore(read_key())</lang>
Run with:
$ ocaml graphics.cma xor_pattern.ml
Output:
Perl
<lang perl>use GD;
my $img = new GD::Image(256, 256, 1);
for my $y(0..255) {
for my $x(0..255) { my $color = $img->colorAllocate( abs(255 - $x - $y), (255-$x) ^ $y , $x ^ (255-$y)); $img->setPixel($x, $y, $color); }
}
PHP
<lang php>header("Content-Type: image/png");
$w = 256; $h = 256;
$im = imagecreate($w, $h)
or die("Cannot Initialize new GD image stream");
$color = array(); for($i=0;$i<256;$i++) {
array_push($color,imagecolorallocate($im,sin(($i)*(2*3.14/256))*128+128,$i/2,$i));
}
for($i=0;$i<$w;$i++) {
for($j=0;$j<$h;$j++) { imagesetpixel($im,$i,$j,$color[$i^$j]); }
}
imagepng($im); imagedestroy($im);</lang>
PureBasic
<lang purebasic>#palletteSize = 128 Procedure.f XorPattern(x, y) ;compute the gradient value from the pixel values
Protected result = x ! y ProcedureReturn Mod(result, #palletteSize) / #palletteSize
EndProcedure
Procedure drawPattern()
StartDrawing(ImageOutput(0)) DrawingMode(#PB_2DDrawing_Gradient) CustomGradient(@XorPattern()) ;specify a gradient pallette from which only specific indexes will be used For i = 1 To #palletteSize GradientColor(1 / i, i * $BACE9B) ; or alternatively use $BEEFDEAD Next Box(0, 0, ImageWidth(0), ImageHeight(0)) StopDrawing()
EndProcedure
If OpenWindow(0, 0, 0, 128, 128, "XOR Pattern", #PB_Window_SystemMenu)
CreateImage(0, WindowWidth(0), WindowHeight(0)) drawPattern() ImageGadget(0, 0, 0, ImageWidth(0), ImageHeight(0), ImageID(0)) Repeat event = WaitWindowEvent(20) Until event = #PB_Event_CloseWindow
Tcl
<lang tcl>package require Tk
proc xorImage {img table} {
set data {} set h [image height $img] set w [image width $img] for {set y 0} {$y < $h} {incr y} {
set row {} for {set x 0} {$x < $w} {incr x} { lappend row [lindex $table [expr {($x^$y) % [llength $table]}]] } lappend data $row
} $img put $data
} proc inRange {i f t} {expr {$f + ($t-$f)*$i/255}} proc mkTable {rf rt gf gt bf bt} {
for {set i 0} {$i < 256} {incr i} {
lappend tbl [format "#%02x%02x%02x" \ [inRange $i $rf $rt] [inRange $i $gf $gt] [inRange $i $bf $bt]]
} return $tbl
}
set img [image create photo -width 512 -height 512] xorImage $img [mkTable 0 255 64 192 255 0] pack [label .l -image $img]</lang>