Add logic to load texture images from a graphic file
This commit is contained in:
parent
7d86b9ce7a
commit
76e03225e0
@ -47,10 +47,10 @@ STACKSIZE = 2048
|
|||||||
|
|
||||||
ASRCS =
|
ASRCS =
|
||||||
CSRCS = trv_bitmapfile.c trv_bitmaps.c trv_color.c trv_createworld.c
|
CSRCS = trv_bitmapfile.c trv_bitmaps.c trv_color.c trv_createworld.c
|
||||||
CSRCS += trv_doors.c trv_fsutils.c trv_graphics.c trv_input.c trv_mem.c
|
CSRCS += trv_doors.c trv_fsutils.c trv_graphicfile.c trv_graphics.c
|
||||||
CSRCS += trv_planefiles.c trv_planelists.c trv_pov.c trv_rayavoid.c
|
CSRCS += trv_input.c trv_mem.c trv_pcx.c trv_planefiles.c trv_planelists.c
|
||||||
CSRCS += trv_raycast.c trv_raycntl.c trv_rayprune.c trv_rayrend.c
|
CSRCS += trv_pov.c trv_rayavoid.c trv_raycast.c trv_raycntl.c
|
||||||
CSRCS += trv_texturefile.c trv_trigtbl.c
|
CSRCS += trv_rayprune.c trv_rayrend.c trv_texturefile.c trv_trigtbl.c
|
||||||
MAINSRC = trv_main.c
|
MAINSRC = trv_main.c
|
||||||
|
|
||||||
ifeq ($(CONFIG_NX),y)
|
ifeq ($(CONFIG_NX),y)
|
||||||
|
@ -41,40 +41,18 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "trv_types.h"
|
#include "trv_types.h"
|
||||||
|
#include "trv_color.h"
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/* MAGIC_LENGTH must be the length of the longest MAGIC string. */
|
|
||||||
|
|
||||||
#define MAGIC_LENGTH 5
|
|
||||||
#define GIF_MAGIC "GIF87"
|
|
||||||
#define GIF89_MAGIC "GIF89"
|
|
||||||
#define PPM_MAGIC "P6"
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Type Definitions
|
* Public Type Definitions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
enum trv_graphicfile_format_e
|
|
||||||
{
|
|
||||||
GRAPHICFILE_UNKNOWN = 0,
|
|
||||||
GRAPHICFILE_GIF87,
|
|
||||||
GRAPHICFILE_GIF89,
|
|
||||||
GRAPHICFILE_PPM,
|
|
||||||
GRAPHICFILE_PCX
|
|
||||||
};
|
|
||||||
|
|
||||||
enum trv_graphicfile_type_e
|
|
||||||
{
|
|
||||||
GRAPHICFILE_TRUECOLOR = 0,
|
|
||||||
GRAPHICFILE_PALETTED
|
|
||||||
};
|
|
||||||
|
|
||||||
struct trv_graphicfile_s
|
struct trv_graphicfile_s
|
||||||
{
|
{
|
||||||
uint8_t type; /* See enum trv_graphicfile_type_e */
|
|
||||||
uint16_t height;
|
uint16_t height;
|
||||||
uint16_t width;
|
uint16_t width;
|
||||||
int palette_entries;
|
int palette_entries;
|
||||||
|
87
graphics/traveler/include/trv_pcx.h
Executable file
87
graphics/traveler/include/trv_pcx.h
Executable file
@ -0,0 +1,87 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
* apps/graphics/traveler/include/trv_pcx.h
|
||||||
|
* This is the header file associated with trv_pcx.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_PCX_H
|
||||||
|
#define __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_PCX_H
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included Files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "trv_types.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#define SIZEOF_PCX_HEADER 128
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Type Definitions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
struct pcx_header_s
|
||||||
|
{
|
||||||
|
char manufacturer;
|
||||||
|
char version;
|
||||||
|
char encoding;
|
||||||
|
char bits_per_pixel;
|
||||||
|
int16_t x, y;
|
||||||
|
int16_t width, height;
|
||||||
|
int16_t horz_res;
|
||||||
|
int16_t vert_res;
|
||||||
|
char ega_palette[48];
|
||||||
|
char reserved;
|
||||||
|
char num_color_planes;
|
||||||
|
int16_t bytes_per_line;
|
||||||
|
int16_t palette_type;
|
||||||
|
char padding[58];
|
||||||
|
};
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Data
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Function Prototypes
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
FAR struct trv_graphicfile_s *trv_load_pcx(FAR FILE *fp,
|
||||||
|
FAR const char *filename);
|
||||||
|
|
||||||
|
#endif /* __APPS_GRAPHICS_TRAVELER_INCLUDE_TRV_PCX_H */
|
167
graphics/traveler/src/trv_graphicfile.c
Normal file
167
graphics/traveler/src/trv_graphicfile.c
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* apps/graphics/traveler/src/trv_graphicfile.c
|
||||||
|
* Load image from a graphic file
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "trv_types.h"
|
||||||
|
#include "trv_mem.h"
|
||||||
|
#include "trv_pcx.h"
|
||||||
|
#include "trv_graphicfile.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: tvr_graphicfile_read
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Read a bitmap texture from a graphic file
|
||||||
|
*
|
||||||
|
* NOTE: This function exists only as extension pointer where additional
|
||||||
|
* graphic file formats can be supported. Currently only the ancient
|
||||||
|
* PCX format is supported.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
FAR struct trv_graphicfile_s *tvr_graphicfile_read(char *filename)
|
||||||
|
{
|
||||||
|
FAR struct trv_graphicfile_s *gfile = NULL;
|
||||||
|
FAR FILE *fp;
|
||||||
|
|
||||||
|
/* Open the graphic file for reading */
|
||||||
|
|
||||||
|
fp = fopen(filename, "rb");
|
||||||
|
if (fp == NULL)
|
||||||
|
{
|
||||||
|
int errcode = errno;
|
||||||
|
fprintf(stderr, "ERROR: Failed to open graphic file %s: %d\n",
|
||||||
|
filename, errcode);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load the graphic file into memory.
|
||||||
|
*
|
||||||
|
* REVISIT: Here would be the place where we would decide on the format of
|
||||||
|
* the graphic file. Here we just assume that the file is PCX.
|
||||||
|
*/
|
||||||
|
|
||||||
|
gfile = trv_load_pcx(fp, filename);
|
||||||
|
if (gfile == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "ERROR: Failed to load graphic file %s\n", filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
return gfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* Name: trv_graphicfile_new
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Allocate a new graphic file structure
|
||||||
|
*
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
FAR struct trv_graphicfile_s *trv_graphicfile_new(void)
|
||||||
|
{
|
||||||
|
FAR struct trv_graphicfile_s *gfile;
|
||||||
|
|
||||||
|
|
||||||
|
gfile = (FAR struct trv_graphicfile_s*)
|
||||||
|
trv_malloc(sizeof(struct trv_graphicfile_s));
|
||||||
|
if (gfile)
|
||||||
|
{
|
||||||
|
gfile->transparent_entry = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return gfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* Name: trv_graphicfile_free
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Free the graphic file structure after also freeing in additional
|
||||||
|
* resources attached to the structure.
|
||||||
|
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
void trv_graphicfile_free(FAR struct trv_graphicfile_s *gfile)
|
||||||
|
{
|
||||||
|
if (gfile != NULL)
|
||||||
|
{
|
||||||
|
if (gfile->palette != NULL)
|
||||||
|
{
|
||||||
|
trv_free(gfile->palette);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gfile->bitmap != NULL)
|
||||||
|
{
|
||||||
|
trv_free(gfile->bitmap);
|
||||||
|
}
|
||||||
|
|
||||||
|
trv_free(gfile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* Name: trv_graphicfile_pixel
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Return the RGB color value for a pixel at location (x,y) in the
|
||||||
|
* texture bitmap.
|
||||||
|
*
|
||||||
|
************************************************************************/
|
||||||
|
|
||||||
|
struct trv_color_rgb_s
|
||||||
|
trv_graphicfile_pixel(FAR struct trv_graphicfile_s *gfile, int x, int y)
|
||||||
|
{
|
||||||
|
/* REVISIT: This only works for paletted graphics files like PCX.
|
||||||
|
* For the paletted color, the color lookup values lies at the (x,y)
|
||||||
|
* position in the image. For a true color image, the RGB value would
|
||||||
|
* lie at the (x,y) position,
|
||||||
|
*/
|
||||||
|
|
||||||
|
int ndx = gfile->bitmap[y * gfile->width + x];
|
||||||
|
return gfile->palette[ndx];
|
||||||
|
}
|
217
graphics/traveler/src/trv_pcx.c
Normal file
217
graphics/traveler/src/trv_pcx.c
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
/*******************************************************************************
|
||||||
|
* apps/graphics/traveler/src/trv_pcx.c
|
||||||
|
* PCX graphic file support
|
||||||
|
*
|
||||||
|
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Included files
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "trv_types.h"
|
||||||
|
#include "trv_mem.h"
|
||||||
|
#include "trv_color.h"
|
||||||
|
#include "trv_bitmaps.h"
|
||||||
|
#include "trv_graphicfile.h"
|
||||||
|
#include "trv_pcx.h"
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Private Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: trv_load_pcxheader
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
static void trv_load_pcxheader(FAR FILE *fp, struct pcx_header_s *header)
|
||||||
|
{
|
||||||
|
FAR uint8_t *tmpbuffer;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Load the header */
|
||||||
|
|
||||||
|
tmpbuffer = (FAR uint8_t*)header;
|
||||||
|
|
||||||
|
for (i = 0; i < SIZEOF_PCX_HEADER; i++)
|
||||||
|
{
|
||||||
|
tmpbuffer[i] = getc(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: trv_load_pcxdata
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
static void trv_load_pcxdata(FAR FILE *fp, int32_t imagesize,
|
||||||
|
FAR uint8_t *imagebuffer)
|
||||||
|
{
|
||||||
|
uint32_t count;
|
||||||
|
int16_t nbytes;
|
||||||
|
uint8_t data;
|
||||||
|
|
||||||
|
count = 0;
|
||||||
|
while(count <= imagesize)
|
||||||
|
{
|
||||||
|
/* Get the first piece of data */
|
||||||
|
|
||||||
|
data = getc(fp);
|
||||||
|
|
||||||
|
/* Is this a run length encoding? */
|
||||||
|
|
||||||
|
if ((data >= 192) /* && (data <= 255) */)
|
||||||
|
{
|
||||||
|
/* How many bytes in run? */
|
||||||
|
|
||||||
|
nbytes = data - 192;
|
||||||
|
|
||||||
|
/* Get the actual data for the run */
|
||||||
|
|
||||||
|
data = getc(fp);
|
||||||
|
|
||||||
|
/* Replicate data in buffer nbytes times */
|
||||||
|
|
||||||
|
while(nbytes-- > 0)
|
||||||
|
{
|
||||||
|
imagebuffer[count++] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Actual data, just copy it into buffer at next location */
|
||||||
|
|
||||||
|
imagebuffer[count++] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: trv_load_pcxpalette
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
static void trv_load_pcxpalette(FAR FILE *fp,
|
||||||
|
FAR struct trv_color_rgb_s *palette)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Move to end of file then back up 768 bytes i.e. to beginning of palette */
|
||||||
|
|
||||||
|
(void)fseek(fp, -768L, SEEK_END);
|
||||||
|
|
||||||
|
/* Load the PCX palette into the palette structure */
|
||||||
|
|
||||||
|
for (i = 0; i < 256; i++)
|
||||||
|
{
|
||||||
|
/* Get the RGB components */
|
||||||
|
|
||||||
|
palette[i].red = getc(fp);
|
||||||
|
palette[i].green = getc(fp);
|
||||||
|
palette[i].blue = getc(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: trv_load_pcx
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* This function loads a PCX file into a memory.
|
||||||
|
*
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
FAR struct trv_graphicfile_s *trv_load_pcx(FAR FILE *fp,
|
||||||
|
FAR const char *filename)
|
||||||
|
{
|
||||||
|
struct pcx_header_s header;
|
||||||
|
FAR trv_pixel_t *buffer;
|
||||||
|
FAR struct trv_graphicfile_s *gfile;
|
||||||
|
FAR struct trv_color_rgb_s *palette;
|
||||||
|
uint16_t imagewidth;
|
||||||
|
uint16_t imageheight;
|
||||||
|
uint32_t imagesize;
|
||||||
|
|
||||||
|
/* Load the PCX Header */
|
||||||
|
|
||||||
|
trv_load_pcxheader(fp, &header);
|
||||||
|
|
||||||
|
/* Allocate Space to hold the image data */
|
||||||
|
|
||||||
|
imagewidth = header.width - header.x + 1;
|
||||||
|
imageheight = header.height - header.y + 1;
|
||||||
|
imagesize = imageheight * imagewidth * sizeof(trv_pixel_t);
|
||||||
|
buffer = (FAR trv_pixel_t*)trv_malloc(imagesize + 1);
|
||||||
|
|
||||||
|
/* Load the PCX data into the buffer */
|
||||||
|
|
||||||
|
trv_load_pcxdata(fp, imagesize, (FAR uint8_t*)buffer);
|
||||||
|
|
||||||
|
/* Allocate space to hold the PCX palette */
|
||||||
|
|
||||||
|
palette = (struct trv_color_rgb_s*)
|
||||||
|
trv_malloc(sizeof(struct trv_color_rgb_s) * 256);
|
||||||
|
|
||||||
|
gfile = NULL;
|
||||||
|
if (palette)
|
||||||
|
{
|
||||||
|
/* Load the PCX palette */
|
||||||
|
|
||||||
|
trv_load_pcxpalette(fp, palette);
|
||||||
|
|
||||||
|
/* Now save the resulting data in a struct trv_graphicfile_s structure */
|
||||||
|
|
||||||
|
gfile = trv_graphicfile_new();
|
||||||
|
if (gfile)
|
||||||
|
{
|
||||||
|
gfile->palette = palette;
|
||||||
|
gfile->width = imagewidth;
|
||||||
|
gfile->height = imageheight;
|
||||||
|
gfile->bitmap = buffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return gfile;
|
||||||
|
}
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user