Bitmap/Write a PPM file: Difference between revisions

Content added Content deleted
m (syntax highlighting fixup automation)
m (Automated syntax highlighting fixup (second round - minor fixes))
Line 1: Line 1:
[[Category:Input Output]]
{{task|Raster graphics operations}}
{{task|Raster graphics operations}}
[[Category:Input Output]]


Using the data storage type defined [[Basic_bitmap_storage|on this page]] for raster images, write the image to a PPM file (binary P6 prefered).
Using the data storage type defined [[Basic_bitmap_storage|on this page]] for raster images, write the image to a PPM file (binary P6 prefered).
Line 6: Line 6:
(Read [[wp:Netpbm_format|the definition of PPM file]] on Wikipedia.)
(Read [[wp:Netpbm_format|the definition of PPM file]] on Wikipedia.)
<br><br>
<br><br>

=={{header|11l}}==
=={{header|11l}}==
{{trans|Python}}
{{trans|Python}}


<syntaxhighlight lang=11l>T Colour
<syntaxhighlight lang="11l">T Colour
Byte r, g, b
Byte r, g, b


Line 90: Line 89:
0 0 0 255 255 255 0 0 0 0 0 0
0 0 0 255 255 255 0 0 0 0 0 0
</pre>
</pre>

=={{header|Action!}}==
=={{header|Action!}}==
{{libheader|Action! Bitmap tools}}
{{libheader|Action! Bitmap tools}}
<syntaxhighlight lang=Action!>INCLUDE "H6:RGBIMAGE.ACT" ;from task Bitmap
<syntaxhighlight lang="action!">INCLUDE "H6:RGBIMAGE.ACT" ;from task Bitmap


PROC SaveHeader(RgbImage POINTER img
PROC SaveHeader(RgbImage POINTER img
Line 202: Line 200:
63 31 127 127 31 63 127 63 31
63 31 127 127 31 63 127 63 31
</pre>
</pre>

=={{header|Ada}}==
=={{header|Ada}}==
<syntaxhighlight lang=ada>with Ada.Characters.Latin_1;
<syntaxhighlight lang="ada">with Ada.Characters.Latin_1;
with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;
with Ada.Streams.Stream_IO; use Ada.Streams.Stream_IO;


Line 231: Line 228:
end Put_PPM;</syntaxhighlight>
end Put_PPM;</syntaxhighlight>
The solution writes the image into an opened file. The file format might fail to work on certain [[OS]]es, because output might mangle control characters like LF, CR, FF, HT, VT etc. The OS might also limit the line length of a text file. In general it is a bad idea to mix binary and text output in one file. This solution uses ''stream I/O'', which should be as portable as possible.
The solution writes the image into an opened file. The file format might fail to work on certain [[OS]]es, because output might mangle control characters like LF, CR, FF, HT, VT etc. The OS might also limit the line length of a text file. In general it is a bad idea to mix binary and text output in one file. This solution uses ''stream I/O'', which should be as portable as possible.

=={{header|Aime}}==
=={{header|Aime}}==
<syntaxhighlight lang=aime>integer i, h, j, w;
<syntaxhighlight lang="aime">integer i, h, j, w;
file f;
file f;


Line 250: Line 246:
} while ((i += 16) < w);
} while ((i += 16) < w);
} while ((j += 1) < h);</syntaxhighlight>
} while ((j += 1) < h);</syntaxhighlight>

=={{header|Applesoft BASIC}}==
=={{header|Applesoft BASIC}}==
<syntaxhighlight lang=gwbasic> 100 W = 8
<syntaxhighlight lang="gwbasic"> 100 W = 8
110 H = 8
110 H = 8
120 BA = 24576
120 BA = 24576
Line 272: Line 267:
=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==
{{works with|AutoHotkey_L|45}}
{{works with|AutoHotkey_L|45}}
<syntaxhighlight lang=AutoHotkey>
<syntaxhighlight lang="autohotkey">
cyan := color(0,255,255) ; r,g,b
cyan := color(0,255,255) ; r,g,b
cyanppm := Bitmap(10, 10, cyan) ; width, height, background-color
cyanppm := Bitmap(10, 10, cyan) ; width, height, background-color
Line 305: Line 300:
}
}
</syntaxhighlight>
</syntaxhighlight>

=={{header|AWK}}==
=={{header|AWK}}==
<syntaxhighlight lang=AWK>#!/usr/bin/awk -f
<syntaxhighlight lang="awk">#!/usr/bin/awk -f
BEGIN {
BEGIN {
split("255,0,0,255,255,0",R,",");
split("255,0,0,255,255,0",R,",");
Line 320: Line 314:
close(outfile);
close(outfile);
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|BBC BASIC}}==
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang=bbcbasic> Width% = 200
<syntaxhighlight lang="bbcbasic"> Width% = 200
Height% = 200
Height% = 200
Line 353: Line 346:
SWAP ?^col%,?(^col%+2)
SWAP ?^col%,?(^col%+2)
= col%</syntaxhighlight>
= col%</syntaxhighlight>

=={{header|BQN}}==
=={{header|BQN}}==
<syntaxhighlight lang=bqn>header_ppm ← "P6
<syntaxhighlight lang="bqn">header_ppm ← "P6
4 8
4 8
255
255
Line 371: Line 363:
"small.ppm" •file.Bytes bytes_ppm</syntaxhighlight>
"small.ppm" •file.Bytes bytes_ppm</syntaxhighlight>
{{trans|C}}
{{trans|C}}
<syntaxhighlight lang=bqn>header_ppm ← "P6
<syntaxhighlight lang="bqn">header_ppm ← "P6
800 800
800 800
255
255
Line 377: Line 369:
image_ppm ← @ + ⥊ > {256|𝕨‿𝕩‿(𝕨×𝕩)}⌜˜ ↕800
image_ppm ← @ + ⥊ > {256|𝕨‿𝕩‿(𝕨×𝕩)}⌜˜ ↕800
"first_bqn.ppm" •file.Bytes header_ppm ∾ image_ppm</syntaxhighlight>
"first_bqn.ppm" •file.Bytes header_ppm ∾ image_ppm</syntaxhighlight>

=={{header|C}}==
=={{header|C}}==


This is one file program which writes one color in each step :
This is one file program which writes one color in each step :
<syntaxhighlight lang=c>#include <stdlib.h>
<syntaxhighlight lang="c">#include <stdlib.h>
#include <stdio.h>
#include <stdio.h>


Line 408: Line 399:
This program writes whole array in one step :
This program writes whole array in one step :


<syntaxhighlight lang=c>#include <stdio.h>
<syntaxhighlight lang="c">#include <stdio.h>


int main()
int main()
Line 452: Line 443:
Interface:
Interface:


<syntaxhighlight lang=c>void output_ppm(FILE *fd, image img);</syntaxhighlight>
<syntaxhighlight lang="c">void output_ppm(FILE *fd, image img);</syntaxhighlight>


Implementation:
Implementation:


<syntaxhighlight lang=c>#include "imglib.h"
<syntaxhighlight lang="c">#include "imglib.h"


void output_ppm(FILE *fd, image img)
void output_ppm(FILE *fd, image img)
Line 466: Line 457:
(void) fflush(fd);
(void) fflush(fd);
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|C sharp|C#}}==
=={{header|C sharp|C#}}==
This implementation uses a StreamWriter to write the header in text, then writes the pixel data in binary using a BinaryWriter.
This implementation uses a StreamWriter to write the header in text, then writes the pixel data in binary using a BinaryWriter.
<syntaxhighlight lang=csharp>using System;
<syntaxhighlight lang="csharp">using System;
using System.IO;
using System.IO;
class PPMWriter
class PPMWriter
Line 494: Line 484:
}
}
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|C++}}==
=={{header|C++}}==
{{trans|C}}
{{trans|C}}
<syntaxhighlight lang=cpp>#include <fstream>
<syntaxhighlight lang="cpp">#include <fstream>
#include <cstdio>
#include <cstdio>


Line 515: Line 504:
return EXIT_SUCCESS;
return EXIT_SUCCESS;
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|Common Lisp}}==
=={{header|Common Lisp}}==


<syntaxhighlight lang=lisp>(defun write-rgb-buffer-to-ppm-file (filename buffer)
<syntaxhighlight lang="lisp">(defun write-rgb-buffer-to-ppm-file (filename buffer)
(with-open-file (stream filename
(with-open-file (stream filename
:element-type '(unsigned-byte 8)
:element-type '(unsigned-byte 8)
Line 546: Line 534:
(write-byte blue stream)))))))
(write-byte blue stream)))))))
filename)</syntaxhighlight>
filename)</syntaxhighlight>

=={{header|D}}==
=={{header|D}}==
The Image module contains a savePPM6 function to save binary PPM images.
The Image module contains a savePPM6 function to save binary PPM images.

=={{header|Delphi}}==
=={{header|Delphi}}==
Helper class to enable bitmap export to ppm.
Helper class to enable bitmap export to ppm.
<syntaxhighlight lang=Delphi>
<syntaxhighlight lang="delphi">
program btm2ppm;
program btm2ppm;


Line 605: Line 591:
end.
end.
</syntaxhighlight>
</syntaxhighlight>

=={{header|E}}==
=={{header|E}}==


The code for this task is incorporated into [[Basic bitmap storage#E]].
The code for this task is incorporated into [[Basic bitmap storage#E]].

=={{header|Erlang}}==
=={{header|Erlang}}==
Writes a bitmap to PPM file. Uses 24 bit color depth (color max value 255).
Writes a bitmap to PPM file. Uses 24 bit color depth (color max value 255).
<syntaxhighlight lang=erlang>
<syntaxhighlight lang="erlang">
-module(ppm).
-module(ppm).


Line 660: Line 644:


</syntaxhighlight>
</syntaxhighlight>

=={{header|Euphoria}}==
=={{header|Euphoria}}==
{{trans|C}}
{{trans|C}}
<syntaxhighlight lang=euphoria>constant dimx = 800, dimy = 800
<syntaxhighlight lang="euphoria">constant dimx = 800, dimy = 800
constant fn = open("first.ppm","wb") -- b - binary mode
constant fn = open("first.ppm","wb") -- b - binary mode
sequence color
sequence color
Line 680: Line 663:


Procedure writing [[Bitmap#Euphoria|bitmap]] data storage:
Procedure writing [[Bitmap#Euphoria|bitmap]] data storage:
<syntaxhighlight lang=euphoria>procedure write_ppm(sequence filename, sequence image)
<syntaxhighlight lang="euphoria">procedure write_ppm(sequence filename, sequence image)
integer fn,dimx,dimy
integer fn,dimx,dimy
dimy = length(image[1])
dimy = length(image[1])
Line 694: Line 677:
close(fn)
close(fn)
end procedure</syntaxhighlight>
end procedure</syntaxhighlight>

=={{header|FBSL}}==
=={{header|FBSL}}==
This code converts a Windows BMP to a PPM. Uses FBSL volatiles for brevity.
This code converts a Windows BMP to a PPM. Uses FBSL volatiles for brevity.
Line 700: Line 682:
'''24-bpp P.O.T.-size BMP solution:'''
'''24-bpp P.O.T.-size BMP solution:'''
[[File:FBSLWritePpm.PNG|right]]
[[File:FBSLWritePpm.PNG|right]]
<syntaxhighlight lang=qbasic>#ESCAPECHARS ON
<syntaxhighlight lang="qbasic">#ESCAPECHARS ON


DIM bmpin = ".\\LenaClr.bmp", ppmout = ".\\Lena.ppm", bmpblob = 54 ' Size of BMP file headers
DIM bmpin = ".\\LenaClr.bmp", ppmout = ".\\Lena.ppm", bmpblob = 54 ' Size of BMP file headers
Line 723: Line 705:


FILEPUT(FILEOPEN(ppmout, BINARY_NEW), ppmdata): FILECLOSE(FILEOPEN)</syntaxhighlight>
FILEPUT(FILEOPEN(ppmout, BINARY_NEW), ppmdata): FILECLOSE(FILEOPEN)</syntaxhighlight>

=={{header|Forth}}==
=={{header|Forth}}==
<syntaxhighlight lang=forth>: write-ppm { bmp fid -- }
<syntaxhighlight lang="forth">: write-ppm { bmp fid -- }
s" P6" fid write-line throw
s" P6" fid write-line throw
bmp bdim swap
bmp bdim swap
Line 739: Line 720:
test over write-ppm
test over write-ppm
close-file throw</syntaxhighlight>
close-file throw</syntaxhighlight>

=={{header|Fortran}}==
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
{{works with|Fortran|90 and later}}
It loads <code>rgbimage_m</code> module, which is defined [[Basic bitmap storage#Fortran|here]].
It loads <code>rgbimage_m</code> module, which is defined [[Basic bitmap storage#Fortran|here]].
<syntaxhighlight lang=fortran>program main
<syntaxhighlight lang="fortran">program main


use rgbimage_m
use rgbimage_m
Line 769: Line 749:


end program</syntaxhighlight>
end program</syntaxhighlight>

=={{header|GAP}}==
=={{header|GAP}}==
<syntaxhighlight lang=gap># Dirty implementation
<syntaxhighlight lang="gap"># Dirty implementation
# Only P3 format, an image is a list of 3 matrices (r, g, b)
# Only P3 format, an image is a list of 3 matrices (r, g, b)
# Max color is always 255
# Max color is always 255
Line 822: Line 801:
PutPixel(g, 2, 3, [0, 0, 0]);
PutPixel(g, 2, 3, [0, 0, 0]);
WriteImage("example.ppm", g);</syntaxhighlight>
WriteImage("example.ppm", g);</syntaxhighlight>

=={{header|Go}}==
=={{header|Go}}==
Code below writes 8-bit P6 format only. See Bitmap task for additional file needed to build working raster package.
Code below writes 8-bit P6 format only. See Bitmap task for additional file needed to build working raster package.
<syntaxhighlight lang=go>package raster
<syntaxhighlight lang="go">package raster


import (
import (
Line 880: Line 858:
}</syntaxhighlight>
}</syntaxhighlight>
Demonstration program. Note that it imports package raster. To build package raster, put code above in one file, put code from Bitmap task in another, and compile and link them into a Go package.
Demonstration program. Note that it imports package raster. To build package raster, put code above in one file, put code from Bitmap task in another, and compile and link them into a Go package.
<syntaxhighlight lang=go>package main
<syntaxhighlight lang="go">package main


// Files required to build supporting package raster are found in:
// Files required to build supporting package raster are found in:
Line 899: Line 877:
}
}
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|Haskell}}==
=={{header|Haskell}}==
<syntaxhighlight lang=haskell>{-# LANGUAGE ScopedTypeVariables #-}
<syntaxhighlight lang="haskell">{-# LANGUAGE ScopedTypeVariables #-}


module Bitmap.Netpbm(readNetpbm, writeNetpbm) where
module Bitmap.Netpbm(readNetpbm, writeNetpbm) where
Line 951: Line 928:
where magicNumber = netpbmMagicNumber (nil :: c)
where magicNumber = netpbmMagicNumber (nil :: c)
maxval = netpbmMaxval (nil :: c)</syntaxhighlight>
maxval = netpbmMaxval (nil :: c)</syntaxhighlight>

=={{header|J}}==
=={{header|J}}==
'''Solution:'''
'''Solution:'''
<syntaxhighlight lang=j>require 'files'
<syntaxhighlight lang="j">require 'files'


NB. ($x) is height, width, colors per pixel
NB. ($x) is height, width, colors per pixel
Line 963: Line 939:
'''Example:'''
'''Example:'''
Using routines from [[Basic_bitmap_storage#J|Basic Bitmap Storage]]:
Using routines from [[Basic_bitmap_storage#J|Basic Bitmap Storage]]:
<syntaxhighlight lang=j> NB. create 10 by 10 block of magenta pixels in top right quadrant of a 300 wide by 600 high green image
<syntaxhighlight lang="j"> NB. create 10 by 10 block of magenta pixels in top right quadrant of a 300 wide by 600 high green image
pixellist=: >,{;~i.10
pixellist=: >,{;~i.10
myimg=: ((150 + pixellist) ; 255 0 255) setPixels 0 255 0 makeRGB 600 300
myimg=: ((150 + pixellist) ; 255 0 255) setPixels 0 255 0 makeRGB 600 300
myimg writeppm jpath '~temp/myimg.ppm'
myimg writeppm jpath '~temp/myimg.ppm'
540015</syntaxhighlight>
540015</syntaxhighlight>

=={{header|Java}}==
=={{header|Java}}==


See [[Basic_bitmap_storage#Java|Basic Bitmap Storage]] for the <tt>BasicBitmapStorage</tt> class.
See [[Basic_bitmap_storage#Java|Basic Bitmap Storage]] for the <tt>BasicBitmapStorage</tt> class.


<syntaxhighlight lang=java>import java.io.BufferedOutputStream;
<syntaxhighlight lang="java">import java.io.BufferedOutputStream;
import java.io.File;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileOutputStream;
Line 1,002: Line 977:
}
}
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|Julia}}==
=={{header|Julia}}==
{{works with|Julia|0.6}}
{{works with|Julia|0.6}}


<syntaxhighlight lang=julia>using Images, FileIO
<syntaxhighlight lang="julia">using Images, FileIO


h, w = 50, 70
h, w = 50, 70
Line 1,017: Line 991:
save("data/bitmapWrite.ppm", img)
save("data/bitmapWrite.ppm", img)
save("data/bitmapWrite.png", img)</syntaxhighlight>
save("data/bitmapWrite.png", img)</syntaxhighlight>

=={{header|Kotlin}}==
=={{header|Kotlin}}==
For convenience, we repeat the code for the class used in the [[Bitmap]] task here.
For convenience, we repeat the code for the class used in the [[Bitmap]] task here.
<syntaxhighlight lang=scala>// Version 1.2.40
<syntaxhighlight lang="scala">// Version 1.2.40


import java.awt.Color
import java.awt.Color
Line 1,072: Line 1,045:
}
}
}</syntaxhighlight>
}</syntaxhighlight>
=={{header|LiveCode}}==

LiveCode has built in support for importing and exporting PBM, JPEG, GIF, BMP or PNG graphics formats
<syntaxhighlight lang="livecode">
export image "test" to file "~/Test.PPM" as paint -- paint format is one of PBM, PGM, or PPM
</syntaxhighlight>
=={{header|Lua}}==
=={{header|Lua}}==
===Original===
===Original===
<syntaxhighlight lang=lua>
<syntaxhighlight lang="lua">


-- helper function, simulates PHP's array_fill function
-- helper function, simulates PHP's array_fill function
Line 1,186: Line 1,163:
===Alternate===
===Alternate===
Uses the alternate Bitmap implementation [[Bitmap#Alternate|here]], extending it with..
Uses the alternate Bitmap implementation [[Bitmap#Alternate|here]], extending it with..
<syntaxhighlight lang=lua>Bitmap.savePPM = function(self, filename)
<syntaxhighlight lang="lua">Bitmap.savePPM = function(self, filename)
local fp = io.open(filename, "wb")
local fp = io.open(filename, "wb")
if fp == nil then return false end
if fp == nil then return false end
Line 1,200: Line 1,177:
end</syntaxhighlight>
end</syntaxhighlight>
Example usage:
Example usage:
<syntaxhighlight lang=lua>local bitmap = Bitmap(11,5)
<syntaxhighlight lang="lua">local bitmap = Bitmap(11,5)
bitmap:clear({255,255,255})
bitmap:clear({255,255,255})
for y = 1, 5 do
for y = 1, 5 do
Line 1,210: Line 1,187:
end
end
bitmap:savePPM("lua3x5.ppm")</syntaxhighlight>
bitmap:savePPM("lua3x5.ppm")</syntaxhighlight>


=={{header|LiveCode}}==
LiveCode has built in support for importing and exporting PBM, JPEG, GIF, BMP or PNG graphics formats
<syntaxhighlight lang=LiveCode>
export image "test" to file "~/Test.PPM" as paint -- paint format is one of PBM, PGM, or PPM
</syntaxhighlight>


=={{header|M2000 Interpreter}}==
=={{header|M2000 Interpreter}}==
Added ToFile in group which return the function Bitmap. In this example we export using ToFile and get bytes (unsigned values) from buffer, and we export from outside, using getpixel and convert the RGB value to bytes (color returned as a negative number, so we have to invert before further process it)
Added ToFile in group which return the function Bitmap. In this example we export using ToFile and get bytes (unsigned values) from buffer, and we export from outside, using getpixel and convert the RGB value to bytes (color returned as a negative number, so we have to invert before further process it)
===P3 type===
===P3 type===
<syntaxhighlight lang=M2000 Interpreter>
<syntaxhighlight lang="m2000 interpreter">
Module Checkit {
Module Checkit {
Function Bitmap (x as long, y as long) {
Function Bitmap (x as long, y as long) {
Line 1,356: Line 1,324:


===P6 type===
===P6 type===
<syntaxhighlight lang=M2000 Interpreter>
<syntaxhighlight lang="m2000 interpreter">
Module PPMbinaryP6 {
Module PPMbinaryP6 {
If Version<9.4 then 1000
If Version<9.4 then 1000
Line 1,536: Line 1,504:


</syntaxhighlight>
</syntaxhighlight>

=={{header|Mathematica}}/ {{header|Wolfram Language}}==
=={{header|Mathematica}}/ {{header|Wolfram Language}}==
<syntaxhighlight lang=Mathematica>Export["file.ppm",image,"PPM"]</syntaxhighlight>
<syntaxhighlight lang="mathematica">Export["file.ppm",image,"PPM"]</syntaxhighlight>

=={{header|MATLAB}} / {{header|Octave}}==
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang=MATLAB>R=[255,0,0;255,255,0];
<syntaxhighlight lang="matlab">R=[255,0,0;255,255,0];
G=[0,255,0;255,255,0];
G=[0,255,0;255,255,0];
B=[0,0,255;0,0,0];
B=[0,0,255;0,0,0];
Line 1,553: Line 1,519:
fwrite(fid,[r,g,b]','uint8');
fwrite(fid,[r,g,b]','uint8');
fclose(fid);</syntaxhighlight>
fclose(fid);</syntaxhighlight>

=={{header|Modula-3}}==
=={{header|Modula-3}}==
<code>Bitmap</code> is the module from [[Basic_bitmap_storage#Modula-3|Basic Bitmap Storage]].
<code>Bitmap</code> is the module from [[Basic_bitmap_storage#Modula-3|Basic Bitmap Storage]].
<syntaxhighlight lang=modula3>INTERFACE PPM;
<syntaxhighlight lang="modula3">INTERFACE PPM;


IMPORT Bitmap, Pathname;
IMPORT Bitmap, Pathname;
Line 1,563: Line 1,528:


END PPM.</syntaxhighlight>
END PPM.</syntaxhighlight>
<syntaxhighlight lang=modula3>MODULE PPM;
<syntaxhighlight lang="modula3">MODULE PPM;


IMPORT Bitmap, Wr, FileWr, Pathname;
IMPORT Bitmap, Wr, FileWr, Pathname;
Line 1,595: Line 1,560:


=={{Header|Nim}}==
=={{Header|Nim}}==
<syntaxhighlight lang=nim>import bitmap
<syntaxhighlight lang="nim">import bitmap
import streams
import streams


Line 1,634: Line 1,599:
=={{Header|OCaml}}==
=={{Header|OCaml}}==


<syntaxhighlight lang=ocaml>let output_ppm ~oc ~img:(_, r_channel, g_channel, b_channel) =
<syntaxhighlight lang="ocaml">let output_ppm ~oc ~img:(_, r_channel, g_channel, b_channel) =
let width = Bigarray.Array2.dim1 r_channel
let width = Bigarray.Array2.dim1 r_channel
and height = Bigarray.Array2.dim2 r_channel in
and height = Bigarray.Array2.dim2 r_channel in
Line 1,648: Line 1,613:
flush oc;
flush oc;
;;</syntaxhighlight>
;;</syntaxhighlight>

=={{header|Oz}}==
=={{header|Oz}}==
As a function in the module <code>BitmapIO.oz</code>:
As a function in the module <code>BitmapIO.oz</code>:
<syntaxhighlight lang=oz>functor
<syntaxhighlight lang="oz">functor
import
import
Bitmap
Bitmap
Line 1,690: Line 1,654:
end
end
end</syntaxhighlight>
end</syntaxhighlight>

=={{header|Perl}}==
=={{header|Perl}}==
{{libheader|Imager}}
{{libheader|Imager}}
<syntaxhighlight lang=perl>use Imager;
<syntaxhighlight lang="perl">use Imager;


$image = Imager->new(xsize => 200, ysize => 200);
$image = Imager->new(xsize => 200, ysize => 200);
Line 1,701: Line 1,664:
xmax => 150, ymax => 150);
xmax => 150, ymax => 150);
$image->write(file => 'bitmap.ppm') or die $image->errstr;</syntaxhighlight>
$image->write(file => 'bitmap.ppm') or die $image->errstr;</syntaxhighlight>

=={{header|Phix}}==
=={{header|Phix}}==
Copy of [[Bitmap/Write_a_PPM_file#Euphoria|Euphoria]]. The results may be verified with demo\rosetta\viewppm.exw
Copy of [[Bitmap/Write_a_PPM_file#Euphoria|Euphoria]]. The results may be verified with demo\rosetta\viewppm.exw
<syntaxhighlight lang=Phix>-- demo\rosetta\Bitmap_write_ppm.exw
<syntaxhighlight lang="phix">-- demo\rosetta\Bitmap_write_ppm.exw
constant dimx = 512, dimy = 512
constant dimx = 512, dimy = 512
constant fn = open("first.ppm","wb") -- b - binary mode
constant fn = open("first.ppm","wb") -- b - binary mode
Line 1,719: Line 1,681:
close(fn)</syntaxhighlight>
close(fn)</syntaxhighlight>
The following more general purpose routine is used in several other examples (via include ppm.e):
The following more general purpose routine is used in several other examples (via include ppm.e):
<syntaxhighlight lang=Phix>global procedure write_ppm(string filename, sequence image)
<syntaxhighlight lang="phix">global procedure write_ppm(string filename, sequence image)
integer fn = open(filename,"wb"),
integer fn = open(filename,"wb"),
dimx = length(image),
dimx = length(image),
Line 1,734: Line 1,696:
close(fn)
close(fn)
end procedure</syntaxhighlight>
end procedure</syntaxhighlight>

=={{header|PHP}}==
=={{header|PHP}}==
Writes a P6 binary file
Writes a P6 binary file
<syntaxhighlight lang=PHP>class Bitmap {
<syntaxhighlight lang="php">class Bitmap {
public $data;
public $data;
public $w;
public $w;
Line 1,789: Line 1,750:
$b->setPixel(0, 15, array(255,0,0));
$b->setPixel(0, 15, array(255,0,0));
$b->writeP6('p6.ppm');</syntaxhighlight>
$b->writeP6('p6.ppm');</syntaxhighlight>

=={{header|PicoLisp}}==
=={{header|PicoLisp}}==
<syntaxhighlight lang=PicoLisp>(de ppmWrite (Ppm File)
<syntaxhighlight lang="picolisp">(de ppmWrite (Ppm File)
(out File
(out File
(prinl "P6")
(prinl "P6")
Line 1,797: Line 1,757:
(prinl 255)
(prinl 255)
(for Y Ppm (for X Y (apply wr X))) ) )</syntaxhighlight>
(for Y Ppm (for X Y (apply wr X))) ) )</syntaxhighlight>

=={{header|PL/I}}==
=={{header|PL/I}}==
<syntaxhighlight lang=PL/I>/* BITMAP FILE: write out a file in PPM format, P6 (binary). 14/5/2010 */
<syntaxhighlight lang="pl/i">/* BITMAP FILE: write out a file in PPM format, P6 (binary). 14/5/2010 */
test: procedure options (main);
test: procedure options (main);
declare image (0:19,0:19) bit (24);
declare image (0:19,0:19) bit (24);
Line 1,846: Line 1,805:
end put_integer;
end put_integer;
end test;</syntaxhighlight>
end test;</syntaxhighlight>

=={{header|Prolog}}==
=={{header|Prolog}}==
This is an extremely straight forward way to write in Prolog, more complicated methods might use DCGs:
This is an extremely straight forward way to write in Prolog, more complicated methods might use DCGs:
<syntaxhighlight lang=prolog>
<syntaxhighlight lang="prolog">
:- module(bitmapIO, [
:- module(bitmapIO, [
write_ppm_p6/2]).
write_ppm_p6/2]).
Line 1,870: Line 1,828:
usage:
usage:


<syntaxhighlight lang=prolog>
<syntaxhighlight lang="prolog">
:- use_module(bitmap).
:- use_module(bitmap).
:- use_module(bitmapIO).
:- use_module(bitmapIO).
Line 1,880: Line 1,838:


</syntaxhighlight>
</syntaxhighlight>

=={{header|PureBasic}}==
=={{header|PureBasic}}==
<syntaxhighlight lang=PureBasic>Procedure SaveImageAsPPM(Image, file$, Binary = 1)
<syntaxhighlight lang="purebasic">Procedure SaveImageAsPPM(Image, file$, Binary = 1)
; Author Roger Rösch (Nickname Macros)
; Author Roger Rösch (Nickname Macros)
IDFiIe = CreateFile(#PB_Any, file$)
IDFiIe = CreateFile(#PB_Any, file$)
Line 1,916: Line 1,873:
EndIf
EndIf
EndProcedure</syntaxhighlight>
EndProcedure</syntaxhighlight>

=={{header|Python}}==
=={{header|Python}}==
{{works with|Python|3.1}}
{{works with|Python|3.1}}


Extending the example given [[Basic_bitmap_storage#Alternative_version|here]]
Extending the example given [[Basic_bitmap_storage#Alternative_version|here]]
<syntaxhighlight lang=python>
<syntaxhighlight lang="python">
# String masquerading as ppm file (version P3)
# String masquerading as ppm file (version P3)
import io
import io
Line 1,985: Line 1,941:
ppmfileout.close()
ppmfileout.close()
</syntaxhighlight>
</syntaxhighlight>

=={{header|R}}==
=={{header|R}}==
{{libheader|pixmap}}
{{libheader|pixmap}}
<syntaxhighlight lang=r>
<syntaxhighlight lang="r">
# View the existing code in the library
# View the existing code in the library
library(pixmap)
library(pixmap)
Line 1,996: Line 1,951:
write.pnm(theimage, filename)
write.pnm(theimage, filename)
</syntaxhighlight>
</syntaxhighlight>

=={{header|Racket}}==
=={{header|Racket}}==
<syntaxhighlight lang=racket>
<syntaxhighlight lang="racket">
;P3
;P3
(define (bitmap->ppm bitmap output-port)
(define (bitmap->ppm bitmap output-port)
Line 2,041: Line 1,995:


</syntaxhighlight>
</syntaxhighlight>

=={{header|Raku}}==
=={{header|Raku}}==
(formerly Perl 6)
(formerly Perl 6)
{{works with|Rakudo|2016-01}}
{{works with|Rakudo|2016-01}}


<syntaxhighlight lang=raku line>class Pixel { has uint8 ($.R, $.G, $.B) }
<syntaxhighlight lang="raku" line>class Pixel { has uint8 ($.R, $.G, $.B) }
class Bitmap {
class Bitmap {
has UInt ($.width, $.height);
has UInt ($.width, $.height);
Line 2,079: Line 2,032:


[[File:Ppm-perl6.png‎]]
[[File:Ppm-perl6.png‎]]

=={{header|REXX}}==
=={{header|REXX}}==
<syntaxhighlight lang=rexx>/*REXX program writes a PPM formatted image file, also known as a P6 (binary) file. */
<syntaxhighlight lang="rexx">/*REXX program writes a PPM formatted image file, also known as a P6 (binary) file. */
green = 00ff00 /*define a pixel with the color green. */
green = 00ff00 /*define a pixel with the color green. */
parse arg oFN width height color . /*obtain optional arguments from the CL*/
parse arg oFN width height color . /*obtain optional arguments from the CL*/
Line 2,103: Line 2,055:
/*stick a fork in it, we're all done. */</syntaxhighlight>
/*stick a fork in it, we're all done. */</syntaxhighlight>
<br><br>
<br><br>

=={{header|Ruby}}==
=={{header|Ruby}}==
Extending [[Basic_bitmap_storage#Ruby]]
Extending [[Basic_bitmap_storage#Ruby]]
<syntaxhighlight lang=ruby>class RGBColour
<syntaxhighlight lang="ruby">class RGBColour
def values
def values
[@red, @green, @blue]
[@red, @green, @blue]
Line 2,126: Line 2,077:
alias_method :write, :save
alias_method :write, :save
end</syntaxhighlight>
end</syntaxhighlight>

=={{header|Rust}}==
=={{header|Rust}}==
<syntaxhighlight lang=rust>use std::path::Path;
<syntaxhighlight lang="rust">use std::path::Path;
use std::io::Write;
use std::io::Write;
use std::fs::File;
use std::fs::File;
Line 2,197: Line 2,147:
}
}
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|Scala}}==
=={{header|Scala}}==
Extends Pixmap class from task [[Read_ppm_file#Scala|Read PPM file]].
Extends Pixmap class from task [[Read_ppm_file#Scala|Read PPM file]].
<syntaxhighlight lang=scala>object Pixmap {
<syntaxhighlight lang="scala">object Pixmap {
def save(bm:RgbBitmap, filename:String)={
def save(bm:RgbBitmap, filename:String)={
val out=new DataOutputStream(new FileOutputStream(filename))
val out=new DataOutputStream(new FileOutputStream(filename))
Line 2,213: Line 2,162:
}
}
}</syntaxhighlight>
}</syntaxhighlight>

=={{header|Scheme}}==
=={{header|Scheme}}==
{{Works with|Scheme|R<math>^5</math>RS}}
{{Works with|Scheme|R<math>^5</math>RS}}
<syntaxhighlight lang=scheme>(define (write-ppm image file)
<syntaxhighlight lang="scheme">(define (write-ppm image file)
(define (write-image image)
(define (write-image image)
(define (write-row row)
(define (write-row row)
Line 2,239: Line 2,187:
(write-image image)))))</syntaxhighlight>
(write-image image)))))</syntaxhighlight>
Example using definitions in [[Basic bitmap storage#Scheme]]:
Example using definitions in [[Basic bitmap storage#Scheme]]:
<syntaxhighlight lang=scheme>(define image (make-image 800 600))
<syntaxhighlight lang="scheme">(define image (make-image 800 600))
(image-fill! image *black*)
(image-fill! image *black*)
(image-set! image 400 300 *blue*)
(image-set! image 400 300 *blue*)
(write-ppm image "out.ppm")</syntaxhighlight>
(write-ppm image "out.ppm")</syntaxhighlight>

=={{header|Seed7}}==
=={{header|Seed7}}==
<syntaxhighlight lang=seed7>$ include "seed7_05.s7i";
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "draw.s7i";
include "draw.s7i";
include "color.s7i";
include "color.s7i";
Line 2,270: Line 2,217:
end if;
end if;
end func;</syntaxhighlight>
end func;</syntaxhighlight>

=={{header|Sidef}}==
=={{header|Sidef}}==
{{trans|Raku}}
{{trans|Raku}}
<syntaxhighlight lang=ruby>subset Int < Number {|n| n.is_int }
<syntaxhighlight lang="ruby">subset Int < Number {|n| n.is_int }
subset UInt < Int {|n| n >= 0 }
subset UInt < Int {|n| n >= 0 }
subset UInt8 < Int {|n| n ~~ ^256 }
subset UInt8 < Int {|n| n ~~ ^256 }
Line 2,316: Line 2,262:


%f"palette.ppm".write(b.p6, :raw)</syntaxhighlight>
%f"palette.ppm".write(b.p6, :raw)</syntaxhighlight>

=={{header|Stata}}==
=={{header|Stata}}==


P3 format only, with Mata.
P3 format only, with Mata.


<syntaxhighlight lang=stata>mata
<syntaxhighlight lang="stata">mata
void writeppm(name, r, g, b) {
void writeppm(name, r, g, b) {
n = rows(r)
n = rows(r)
Line 2,341: Line 2,286:
writeppm("image.ppm", r, g, b)
writeppm("image.ppm", r, g, b)
end</syntaxhighlight>
end</syntaxhighlight>

=={{header|Tcl}}==
=={{header|Tcl}}==
{{libheader|Tk}}
{{libheader|Tk}}
Referring to [[Basic bitmap storage#Tcl]]:
Referring to [[Basic bitmap storage#Tcl]]:
<syntaxhighlight lang=tcl>package require Tk
<syntaxhighlight lang="tcl">package require Tk


proc output_ppm {image filename} {
proc output_ppm {image filename} {
Line 2,364: Line 2,308:
foreach colour $pixel {puts [expr {$colour & 0xff}]} ;# ==> 255 \n 0 \n 0 \n
foreach colour $pixel {puts [expr {$colour & 0xff}]} ;# ==> 255 \n 0 \n 0 \n
close $fh</syntaxhighlight>
close $fh</syntaxhighlight>

=={{header|UNIX Shell}}==
=={{header|UNIX Shell}}==
{{works with|ksh93}}
{{works with|ksh93}}
Line 2,370: Line 2,313:


Add the following function to the <tt>Bitmap_t</tt> type
Add the following function to the <tt>Bitmap_t</tt> type
<syntaxhighlight lang=bash> function write {
<syntaxhighlight lang="bash"> function write {
_.to_s > "$1"
_.to_s > "$1"
}</syntaxhighlight>
}</syntaxhighlight>
Then you can:
Then you can:
<syntaxhighlight lang=bash>Bitmap_t b
<syntaxhighlight lang="bash">Bitmap_t b
# do stuff to b, and save it:
# do stuff to b, and save it:
b.write '$HOME/tmp/bitmap.ppm'</syntaxhighlight>
b.write '$HOME/tmp/bitmap.ppm'</syntaxhighlight>

=={{header|Vedit macro language}}==
=={{header|Vedit macro language}}==


Line 2,400: Line 2,342:
Return
Return
</pre>
</pre>

=={{header|Visual Basic .NET}}==
=={{header|Visual Basic .NET}}==


<syntaxhighlight lang=vbnet>Public Shared Sub SaveRasterBitmapToPpmFile(ByVal rasterBitmap As RasterBitmap, ByVal filepath As String)
<syntaxhighlight lang="vbnet">Public Shared Sub SaveRasterBitmapToPpmFile(ByVal rasterBitmap As RasterBitmap, ByVal filepath As String)
Dim header As String = String.Format("P6{0}{1}{2}{3}{0}255{0}", vbLf, rasterBitmap.Width, " "c, rasterBitmap.Height)
Dim header As String = String.Format("P6{0}{1}{2}{3}{0}255{0}", vbLf, rasterBitmap.Width, " "c, rasterBitmap.Height)
Dim bufferSize As Integer = header.Length + (rasterBitmap.Width * rasterBitmap.Height * 3)
Dim bufferSize As Integer = header.Length + (rasterBitmap.Width * rasterBitmap.Height * 3)
Line 2,420: Line 2,361:
My.Computer.FileSystem.WriteAllBytes(filepath, bytes, False)
My.Computer.FileSystem.WriteAllBytes(filepath, bytes, False)
End Sub</syntaxhighlight>
End Sub</syntaxhighlight>

=={{header|Wren}}==
=={{header|Wren}}==
{{libheader|DOME}}
{{libheader|DOME}}
This takes a while to run as DOME needs to build up the file contents in string form before saving them to a PPM file. It is not currently possible to write files a line at a time.
This takes a while to run as DOME needs to build up the file contents in string form before saving them to a PPM file. It is not currently possible to write files a line at a time.
<syntaxhighlight lang=ecmascript>import "graphics" for Canvas, ImageData, Color
<syntaxhighlight lang="ecmascript">import "graphics" for Canvas, ImageData, Color
import "dome" for Window, Process
import "dome" for Window, Process
import "io" for FileSystem
import "io" for FileSystem
Line 2,470: Line 2,410:


var Game = Bitmap.new("Bitmap - write to PPM file", 320, 320)</syntaxhighlight>
var Game = Bitmap.new("Bitmap - write to PPM file", 320, 320)</syntaxhighlight>

=={{header|XPL0}}==
=={{header|XPL0}}==
<syntaxhighlight lang=XPL0>include c:\cxpl\codes; \intrinsic 'code' declarations
<syntaxhighlight lang="xpl0">include c:\cxpl\codes; \intrinsic 'code' declarations
def Width=180, Height=135, Color=$123456;
def Width=180, Height=135, Color=$123456;


Line 2,510: Line 2,449:
SetVid(3); \restore display to normal text mode
SetVid(3); \restore display to normal text mode
]</syntaxhighlight>
]</syntaxhighlight>

=={{header|Yabasic}}==
=={{header|Yabasic}}==
<syntaxhighlight lang=Yabasic>clear screen
<syntaxhighlight lang="yabasic">clear screen


wid = 150 : hei = 200
wid = 150 : hei = 200
Line 2,542: Line 2,480:
poke #fn, asc("\n")
poke #fn, asc("\n")
close #fn</syntaxhighlight>
close #fn</syntaxhighlight>

=={{header|zkl}}==
=={{header|zkl}}==
<syntaxhighlight lang=zkl>// convert Windows BMP (bit map) image to PPM
<syntaxhighlight lang="zkl">// convert Windows BMP (bit map) image to PPM


// Read BMP file
// Read BMP file
Line 2,568: Line 2,505:
-rw-r--r-- 1 craigd craigd 786476 Aug 30 01:31 foo.ppm
-rw-r--r-- 1 craigd craigd 786476 Aug 30 01:31 foo.ppm
</pre>
</pre>

{{omit from|PARI/GP}}
{{omit from|PARI/GP}}