home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 2
/
FFMCD02.bin
/
new
/
gfx
/
edit
/
tsmorph
/
savehametc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-12-21
|
17KB
|
844 lines
// TSMorph - Amiga Morphing program
// Copyright (C) © 1993 Topicsave Limited
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
// mpaddock@cix.compulink.co.uk
// $Author: M_J_Paddock $
// $Date: 1992/08/08 01:10:03 $
// $Revision: 1.1 $
// This is routines to save chunky 24 bit RGB in various formats
// B&W 16 grey scale
// B&W 256 grey scale
// HAM6 with fixed palette (but could easily used variable palette)
// HAM6 with fixed palette (but could easily used variable palette)
// DCTV
// include headers
#include <proto/iffparse.h>
#include <graphics/view.h>
#include <libraries/dctv.h>
#include <clib/dctv_protos.h>
#include <pragmas/dctv_pragmas.h>
extern struct Library *DCTVBase;
// IFF header
#include "iffp/ILBMapp.h"
// Following explains(?) the palette choices
// 0 = x00 = b00000000
// 85 = x55 = b01010101
// 170 = xaa = b10101010
// 255 = xff = b11111111
// 0 = x00 = o000 = b00000000
// 36 = x24 = o111 = b00100100
// 73 = x49 = o222 = b01001001
// 109 = x6d = o333 = b01101101
// 146 = x92 = o444 = b10010010
// 182 = xb6 = o555 = b10110110
// 219 = xdb = o666 = b11011011
// 255 = xff = o777 = b11111111
// 0 = x00 = b00000000
// 17 = x11 = b00010001
// 34 = x22 = b00100010
// 51 = x33 = b00110011
// 68 = x44 = b01000100
// 85 = x55 = b01010101
// 102 = x66 = b01100110
// 119 = x77 = b01110111
// 136 = x88 = b10001000
// 153 = x99 = b10011001
// 170 = xaa = b10101010
// 187 = xbb = b10111011
// 204 = xcc = b11001100
// 221 = xdd = b11011101
// 238 = xee = b11101110
// 255 = xff = b11111111
// 16 grey shade palette
UBYTE BW16_Palette[48] = {
0,0,0,
17,17,17,
34,34,34,
51,51,51,
68,68,68,
85,85,85,
102,102,102,
119,119,119,
136,136,136,
153,153,153,
170,170,170,
187,187,187,
204,204,204,
221,221,221,
238,238,238,
255,255,255
};
// 256 grey shade palette
UBYTE BW256_Palette[768] = {
0,0,0,
1,1,1,
2,2,2,
3,3,3,
4,4,4,
5,5,5,
6,6,6,
7,7,7,
8,8,8,
9,9,9,
10,10,10,
11,11,11,
12,12,12,
13,13,13,
14,14,14,
15,15,15,
16,16,16,
17,17,17,
18,18,18,
19,19,19,
20,20,20,
21,21,21,
22,22,22,
23,23,23,
24,24,24,
25,25,25,
26,26,26,
27,27,27,
28,28,28,
29,29,29,
30,30,30,
31,31,31,
32,32,32,
33,33,33,
34,34,34,
35,35,35,
36,36,36,
37,37,37,
38,38,38,
39,39,39,
40,40,40,
41,41,41,
42,42,42,
43,43,43,
44,44,44,
45,45,45,
46,46,46,
47,47,47,
48,48,48,
49,49,49,
50,50,50,
51,51,51,
52,52,52,
53,53,53,
54,54,54,
55,55,55,
56,56,56,
57,57,57,
58,58,58,
59,59,59,
60,60,60,
61,61,61,
62,62,62,
63,63,63,
64,64,64,
65,65,65,
66,66,66,
67,67,67,
68,68,68,
69,69,69,
70,70,70,
71,71,71,
72,72,72,
73,73,73,
74,74,74,
75,75,75,
76,76,76,
77,77,77,
78,78,78,
79,79,79,
80,80,80,
81,81,81,
82,82,82,
83,83,83,
84,84,84,
85,85,85,
86,86,86,
87,87,87,
88,88,88,
89,89,89,
90,90,90,
91,91,91,
92,92,92,
93,93,93,
94,94,94,
95,95,95,
96,96,96,
97,97,97,
98,98,98,
99,99,99,
100,100,100,
101,101,101,
102,102,102,
103,103,103,
104,104,104,
105,105,105,
106,106,106,
107,107,107,
108,108,108,
109,109,109,
110,110,110,
111,111,111,
112,112,112,
113,113,113,
114,114,114,
115,115,115,
116,116,116,
117,117,117,
118,118,118,
119,119,119,
120,120,120,
121,121,121,
122,122,122,
123,123,123,
124,124,124,
125,125,125,
126,126,126,
127,127,127,
128,128,128,
129,129,129,
130,130,130,
131,131,131,
132,132,132,
133,133,133,
134,134,134,
135,135,135,
136,136,136,
137,137,137,
138,138,138,
139,139,139,
140,140,140,
141,141,141,
142,142,142,
143,143,143,
144,144,144,
145,145,145,
146,146,146,
147,147,147,
148,148,148,
149,149,149,
150,150,150,
151,151,151,
152,152,152,
153,153,153,
154,154,154,
155,155,155,
156,156,156,
157,157,157,
158,158,158,
159,159,159,
160,160,160,
161,161,161,
162,162,162,
163,163,163,
164,164,164,
165,165,165,
166,166,166,
167,167,167,
168,168,168,
169,169,169,
170,170,170,
171,171,171,
172,172,172,
173,173,173,
174,174,174,
175,175,175,
176,176,176,
177,177,177,
178,178,178,
179,179,179,
180,180,180,
181,181,181,
182,182,182,
183,183,183,
184,184,184,
185,185,185,
186,186,186,
187,187,187,
188,188,188,
189,189,189,
190,190,190,
191,191,191,
192,192,192,
193,193,193,
194,194,194,
195,195,195,
196,196,196,
197,197,197,
198,198,198,
199,199,199,
200,200,200,
201,201,201,
202,202,202,
203,203,203,
204,204,204,
205,205,205,
206,206,206,
207,207,207,
208,208,208,
209,209,209,
210,210,210,
211,211,211,
212,212,212,
213,213,213,
214,214,214,
215,215,215,
216,216,216,
217,217,217,
218,218,218,
219,219,219,
220,220,220,
221,221,221,
222,222,222,
223,223,223,
224,224,224,
225,225,225,
226,226,226,
227,227,227,
228,228,228,
229,229,229,
230,230,230,
231,231,231,
232,232,232,
233,233,233,
234,234,234,
235,235,235,
236,236,236,
237,237,237,
238,238,238,
239,239,239,
240,240,240,
241,241,241,
242,242,242,
243,243,243,
244,244,244,
245,245,245,
246,246,246,
247,247,247,
248,248,248,
249,249,249,
250,250,250,
251,251,251,
252,252,252,
253,253,253,
254,254,254,
255,255,255,
};
// HAM6 base palette
// note 3 extra entries based on changing r,g or b using HAM stuff
UBYTE HAM6_Palette[57] = {
0,0,0,
0,0,170,
0,85,0,
0,85,170,
0,170,0,
0,170,170,
0,255,0,
0,255,170,
170,0,0,
170,0,170,
170,85,0,
170,85,170,
170,170,0,
170,170,170,
170,255,0,
170,255,170,
0,0,0, // r
0,0,0, // g
0,0,0, // b
};
// HAM8 base palette
// note 3 extra entries based on changing r,g or b using HAM stuff
UBYTE HAM8_Palette[201] = {
0,0,0,
0,0,170,
0,36,0,
0,36,170,
0,73,0,
0,73,170,
0,109,0,
0,109,170,
0,146,0,
0,146,170,
0,182,0,
0,182,170,
0,219,0,
0,219,170,
0,255,0,
0,255,170,
85,0,0,
85,0,170,
85,36,0,
85,36,170,
85,73,0,
85,73,170,
85,109,0,
85,109,170,
85,146,0,
85,146,170,
85,182,0,
85,182,170,
85,219,0,
85,219,170,
85,255,0,
85,255,170,
170,0,0,
170,0,170,
170,36,0,
170,36,170,
170,73,0,
170,73,170,
170,109,0,
170,109,170,
170,146,0,
170,146,170,
170,182,0,
170,182,170,
170,219,0,
170,219,170,
170,255,0,
170,255,170,
255,0,0,
255,0,170,
255,36,0,
255,36,170,
255,73,0,
255,73,170,
255,109,0,
255,109,170,
255,146,0,
255,146,170,
255,182,0,
255,182,170,
255,219,0,
255,219,170,
255,255,0,
255,255,170,
0,0,0, // r
0,0,0, // g
0,0,0, // b
};
/* save 16 grey scale
* FileName : file to save
* width : width of image
* height : height of image
* swidth : widht of image when in full words
* pwidth : page width
* pheight : page height
* pmode : camg chunk
* red : red
* green : green
* blue : blue chunky bit map
* rp : a work rast port
* trp : another work rast port
*/
BOOL
SaveBW16(UBYTE *FileName,USHORT width,USHORT height, UWORD swidth,
USHORT pwidth, USHORT pheight, USHORT pmode,
UBYTE *red, UBYTE *green, UBYTE *blue, struct RastPort *rp, struct RastPort *trp) {
UBYTE *r,*g,*b,*old;
UWORD x,y;
BOOL OkFlag;
struct ILBMInfo *ilbm;
// allocate IFF stuff
if (ilbm = (struct ILBMInfo *)AllocMem(sizeof(struct ILBMInfo),MEMF_PUBLIC|MEMF_CLEAR)) {
if (ilbm->ParseInfo.iff = AllocIFF()) {
r = red;
g = green;
b = blue;
old = red;
// for each line
for (y=0;
y<height;
y++) {
// for each column
for (x=0;
x < width;
x++) {
// convert rgb to 16 grey scale
*old++ = ((30 * *r++) + (59 * *g++) + (11 * *b++)) / 1594;
}
r += (swidth - width);
g += (swidth - width);
b += (swidth - width);
old += (sw