Viewers looking at a painting from On Kawara's "Today Series."
As someone deeply invested in the art world, chances are you’ve
found yourself playing art-guide to your friends or relatives on
trips to the museum. And chances are, your friends or relatives will
consistently praise the old Renaissance paintings, while drawing blank
 stares at anything modern. “What’s the big deal, I could do that?!”

The issue here, for some reason, is a matter of old-fashioned skill
 and labor (or lack thereof). Take On Kawara’s Today Series. At first
 glance, your friends or relatives will inevitably dismiss them (“why would anyone do that?”),
but when you explain that Kawara painted the dates by hand without
using a stencil they are immediately impressed. “Without a stencil?”

The artist’s labor has always been a precarious currency in the art
market; occasionally exchanged for monies, other times for less
tangible payments like publicity, access-to-networks or rare experiences.
 While there are always exceptions to any rule, the amount of labor expended
 has traditionally remained a mathematical measure of validity for the art
 objects that result.

In the age of automation, software tools, and outsourced development,
 how can any digital artist expect to be taken seriously, if the “labor”
expended is a matter of keeping up a Tumblr blog or printing out and blowing
up Photoshop gradients? Is there some kind of heroic equivalent to making digital
 images from scratch, “by hand” and “without stencils?” Look no further! In this
tutorial we will be showing you how to create a Bitmap Image File (.bmp).
 A .bmp file, like any image file, is a matrix of pixels sized a particular
 width by a particular height. We will be creating our .bmp from scratch, by
 typing in machine code bit by bit. When one hears the term “machine code,”
binary-code is likely the first thing that comes to mind. For this tutorial,
 however, we’ll be working in Hexadecimal. In order to write in Hex code you’ll
 need a hex editor. You can download Hex Fiend, a free and open source hex editor
 for MAC, here. (NOTE: Call us crazy, but we’re assuming you’re a MAC user.
Don’t worry, the same principles apply to all platforms).

Hexadecimal Numbers

Hexadecimal is base 16, this means it is a numerical system which uses 16 characters,
 0 through 9 and A through F. We’ve put together a chart for you to use as a “cheat-sheet”
until you get used to writing in hex.

If you were to continue adding to this chart,
 decimal 16 would be hexadecimal 10, 17 would be 11, 18 would be 12 and
if we jumped a bit further, 26 would be hexadecimal 1A, 27 would be 1B, 28 would be 1C and so on.
 We’ll be converting larger numbers into hex a bit later on in this tutorial, when we set our .bmp’s width and height.

Hexadecimal Colors

Now that we understand how regular numbers translate to hex we’ll take a look at colors.
If you are a web developer or you use Photoshop you might already be familiar with hex color values.
 You might already know that FFFFFF translates to white and 000000 to black, but why?
 It’s actually very simple: each pixel in a .bmp has a red value, a blue value and a green value.
 These values can range from 0 to 255, which is 00 – FF in hexadecimal.
A pixel contains 6 characters, or three sets of two, one set for each value R, G and B.
 So if I wanted to make a pixel red, I would type FF0000,
 setting my red value to the max of FF while maintaining my green and blue values at 00.

File Header

Now that we understand the basics of Hexadecimal numbers and colors we can start a small sketch.
Every .bmp file contains two sections, the file’s header followed by the image data.
 The header is the first couple of lines of code which contains the file’s basic information (what kind of file it is, what its dimensions are, etc.)

Lets go ahead and open up Hex Fiend.
Before we start constructing our header we should make some changes to Hex Fiend’s set-up to make it a bit clearer.
 Select the Views tab in the Menu.
 Then un-check Plain Text (this can get distracting), then at the button where it says Byte Grouping select None.
 Now we can start creating our header. The first thing we’ll need is some basic .bmp info, type the following code into your file:

42 4D 4C 00 00 00 00 00 00 00 1A 00 00 00 0C 00 00 00

Next we’ll need to set our .bmp’s dimensions. We’ll keep it small for this first sketch, lets make our width four pixels wide:

04 00

Lets also set our height to four pixels:

04 00

Last, we’ll type in some more standard .bmp header code:

01 00 18 00

We’ve now finished setting up our header, if you did this right it should look like the image below:

Image Data

Here’s where we start typing our pixels.
Usually .bmp files read from right to left and bottom to top,
which is the exact opposite of the way we read words on a page
and can get confusing! The particular kind of .bmp we set up in
this file will also read bottom to top, but will read left to right
instead of right to left, which will make things a bit easier for us.
 So the first pixel we type will be showing up on the bottom left
 hand corner of our .bmp image and the last pixel will show up on
 the top right hand corner. As if things weren’t backwards enough,
 we’ll also be writing our color values backwards, this mean B-G-R
rather than R-G-B.

Once we’ve wrapped our heads around that, we can start typing our
first row (i.e. bottom row). Lets set it up to alternate between red
and white pixels. First I’ll type my red pixel:

00 00 FF

Next we’ll type our white pixel:

FF FF FF

Because we set up our .bmp to be 4px wide, we still need two more pixels
 to finish off our first row; let’s type one more red pixel and one more white pixel:

00 00 FF FF FF FF

That should finish off our bottom row. For the next row we’ll alternate
 between white and black pixels. First we’ll type out a white pixel,
then a black one, then white again, then black again:

FF FF FF 00 00 00 FF FF FF 00 00 00

For the next row we’ll alternate between blue and white:

FF 00 00 FF FF FF FF 00 00 FF FF FF

And for the last row (which visually will be our first row),
 we’ll alternate between white and black again:

FF FF FF 00 00 00 FF FF FF 00 00 00

At this point we’ve typed out four rows, each four pixels wide.
 We can’t type any more pixels because we only set our image dimensions to 4×4 pixels.
 The last thing we need to finish off our file is a little padding.
 Type in four zeroes and you’re finished:

00 00

Now save your file as sketch.bmp and open it up in Preview. It should look like the image below:

Remember, the .bmp file you just created is only 4px wide by 4px high.
This means when you open it up in Preview you’ll have to zoom in a bit before you can see your pixels.
 If your image doesn’t look like the one above you likely mistyped some code.
 Take a close look at the image above and check your file line by line.

Creating Larger Compositions

It was easy to set up our file with a width and height of four pixels
 because the decimal “4” translates to the hexadecimal “4.”
 If we had set up a larger .bmp, say 13px by 13px, our header would have looked like this:

42 4D 7C 00 00 00 00 00 00 00 1A 00 00 00 0C 00 00 00 0D 00 0D 00 01 00 18 00

Notice that the section in our header which contains the width and height are
set to hexadecimal “0D” where it used to say “04”; this is because (as our chart demonstrates above)
13 translates to “D” in hex code. But what if we want to set up an image that’s much larger,
 say for example 268px by 268px? Rather than counting all the way to 268 in hex,
there’s a formula we can use to convert the decimal 268 into hexadecimal.
 This is going to involve some long division so we might want to take out a pencil and paper.
We start by dividing 268 by 16 (because hex is base 16):

(268/16 = 16 R12)

We get 16 with a remainder of 12. The remainder will be our first value,
we’ll convert it to hex (“C”) and save it for later.
Next we’ll take the answer without the remainder (which was 16) and now divide that by 16 like we did before:
 (16/16 = 1 R0). Just like before, the remainder becomes our next hex value (“0”),
which we’ll save for later. We’ll take the answer from this last problem and divide
that again by 16 (1/16 = 0 R1). Now that our answer reached zero we’ve got our last remainder (“1”).

Now we write our remainders from last to first: “1”, “0” and “C” or 10C which is hex code for 268.

Now that we’ve got our hex code, there’s a bit more reordering we need to do before we can stick it in our header.

First we need to split our hex value 10C into pairs starting from the right:
1 0C (we’ll change the “1” to a “01” in order to make it a pair): 01 0C Now that
we’ve organized our hex value into pairs the last thing we need to do before including it in our header is flip the pairs:

0C 01

And because we want both our width and height to be 268, we’ll type in this value twice
 into the dimensions portion of our header. Our new header should look like this:

42 4D 7C 00 00 00 00 00 00 00 1A 00 00 00 0C 00 00 00 0C 01 0C 01 01 00 18 00

That wasn’t so hard! You may have noticed that for both sketches we’ve chosen a
multiple of 4 for my dimensions. This is because any .bmp’s with dimensions
that aren’t a multiple of 4 need to have padding added after each row in the
image data. So say we set up a sketch that was 18px by 18px. We would need to
 divide 18 by 4, which is 4 with a remainder of 2. We then take our remainder (2)
 and add that many 0’s as padding at the end of each row. To avoid having to
type in extra padding, we’ll be sticking to multiples of 4 in this tutorial.

Now that we’ve created my header for a .bmp with a width of 268 and height of
268, it’s time to start typing out some image data. A .bmp with a dimension
 of 268px by 268px will have 71,824 pixels in it. Each pixel contains
6 characters (white = FF FF FF), which means our new sketch will have a
total of 430,944 characters following the header info. After you type out
 all 430, 944 hex characters, remember to close your sketch with a padding of four zeroes at the very end like before.

It’s very important that your image data contain all 430,944 characters as
 required by the dimension we’ve set. If your file is missing or has added even
one character your .bmp won’t work. Check out this sample 268px by 268px sketch below.
 We did a lot of copying and pasting in order to reach all 430,944 characters.
This is really only a taste of the intricate color patterns you can achieve with a hand-crafted bitmap!

2 Comments

Your feedback is welcome. Be it positive or negative. Please do not post any irrelevant comment or abuse anyway.

Post a Comment

Your feedback is welcome. Be it positive or negative. Please do not post any irrelevant comment or abuse anyway.

Previous Post Next Post