Changes

Jump to: navigation, search

Creating images for the Amstrad

2,955 bytes added, 15:17, 16 August 2011
* Now Choose 'Show Grid' from the 'View' menu.
* You may find that you can't see the Grid. If that is the case then go back to 'Configure Grid' and choose a foregound colour with which the grid will be drawn. Click on the 'OK' button to confirm the colour.
 
===Converting existing RGB images to the CPC 3-level color palette===
 
This converts an image to CPC MODE 0:
 
*Maximize saturation (the CPC palette is very saturated, so this will give a better result)
*Scale image to 320xXX (proportional scaling)
*Then scale to 160xXX (non-proportional scaling)
*Posterize with a setting of 3 levels
*Convert to CPC palette ('''Image > Mode > Indexed''', select '''Use custom palette''' and point to the CPC color palette file[http://www.cpctech.org.uk/download/gimp.zip]. Also select '''Remove unused colors''')
*Check '''Image > Image Properties''' for the number of colors used
*If they are more than 16 (or whatever maximum you want):
**Use '''Tools > Selection Tools > By Color Select''' and '''Tools > Color Picker''' to replace the necessary number of colors with others
**'''Image > Mode > RGB''', then convert to the CPC palette again and check in the info window for the number of colors used
*Crop to 160x200 if necessary
*Save in a format your converter to SCR understands
 
===Sample Python program for conversion to SCR===
 
You need to save your image in PPM ASCII format in Gimp for this. Also, Python needs to have NumPy installed. The program will also print the necessary INK statements for BASIC.
 
<pre>
#!/usr/bin/env python
 
# Transform ASCII PPM image to Amstrad SCR file (MODE 0)
# 2011-08-09
 
from numpy import *
import struct
 
f = file("cpc3.ppm", "r") # input file
binfile = open('bin3.scr', 'wb') # output file
 
pal = [[0,0,0],[255,255,255]] # initial palette
 
def byte_bin(x):
r=""
for n in range(7,-1,-1):
v=2**n
if x>=v:
x-=v
r+="1"
else:
r+="0"
return r
 
v = [0,0,0]
count = zeros((256))
 
f.readline()
f.readline()
g = f.readline()
f.readline()
 
xdim, ydim = [int(q) for q in g.split()]
 
for y in range(ydim):
for x in range(xdim):
for c in range(3):
g = f.readline()
v[c] = int(g)
app = 1
for n,p in enumerate(pal):
if p[0]==v[0] and p[1]==v[1] and p[2]==v[2]:
app = 0
count[n]+=1
if app:
pal.append([v[0],v[1],v[2]])
 
for pn,pp in enumerate(pal):
print pn,pp,int(count[pn])
 
f.seek(0)
f.readline()
f.readline()
g = f.readline()
f.readline()
 
b=zeros((xdim,ydim))
c=zeros((2**14))
 
for y in range(ydim):
for x in range(xdim):
for c in range(3):
g = f.readline()
v[c] = int(g)
n = -1
for m,p in enumerate(pal):
if p[0]==v[0] and p[1]==v[1] and p[2]==v[2]:
n = m
b[x,y]=n
 
for cl in range(8): # line in character
for y in range(ydim/8):
for x in range(0,xdim,2):
aa=byte_bin(b[x,y*8+cl])[4:]
bb=byte_bin(b[x+1,y*8+cl])[4:]
oo=(aa[3]+bb[3]+aa[1]+bb[1] +
aa[2]+bb[2]+aa[0]+bb[0])
oo=int(oo,2)
data = struct.pack("B", oo)
binfile.write(data)
data = struct.pack("B", 0)
for t in range(48):
binfile.write(data)
 
binfile.close()
ik=""
 
for n,p in enumerate(pal):
v=p[1]//127*9 + p[0]//127*3 + p[2]//127
lst= [":ink ", str(n), ",", str(v)]
ik+= "".join(lst)
 
print ik
</pre>
1,544
edits