Image::XBin::Palette - Manipulate XBin palette data


Image-XBin documentation Contained in the Image-XBin distribution.

Index


Code Index:

NAME

Top

Image::XBin::Palette - Manipulate XBin palette data

SYNOPSIS

Top

	use Image::XBin::Palette;

	# Read the data...
	my $pal = Image::XBin::Palette->new( $data );

	# Get
	my $rgb = $pal->get( $index );

	# Set
	$pal->set( $index, $rgb );

	# Get data suitable for saving...
	my $out = $pal->as_string;

	# Clear the data
	$pal->clear;

DESCRIPTION

Top

Xbin images can contain palette (16 indexes) data. This module will allow you to create, and manipulate that data.

METHODS

Top

new( [$data] )

Creates a new Image::XBin::Palette object. Unpacks 16 rgb triples.

read( $data )

Explicitly reads in data.

as_string( )

Returns the palette as a pack()'ed string - suitable for saving in an XBin.

get( $index )

Get the rgb triple at index $index

set( $index, $rgb )

Write an rgb triple at index $index

clear( )

Clears any in-memory data.

TODO

Top

* write some useful methods :)

AUTHOR

Top

* Brian Cassidy <bricas@cpan.org>

COPYRIGHT AND LICENSE

Top


Image-XBin documentation Contained in the Image-XBin distribution.
package Image::XBin::Palette;

use strict;
use warnings;

our $VERSION = '0.06';

sub new {
	my $class = shift;
	my $data  = shift;
	my $self  = {};

	bless $self, $class;

	$self->clear;
	$self->read( $data ) if $data;

	return $self;
}

sub read {
	my $self    = shift;
	my $data    = shift;

	$self->{ data } = $data if ref( $data ) eq 'ARRAY';

	my @palette = unpack( 'C*', $data );

	my $palette = [];
	for my $i ( 0..15 ) {
		push @$palette, [];
		for my $j ( 0..2 ) {
			push @{ $palette->[ $#{ $palette } ] }, $palette[ $i * 3 + $j ];
		}
	}

	$self->{ data } = $palette;
}

sub as_string {
	my $self = shift;

	my $output;

	for my $color ( @{ $self->{ data } } ) {
		$output .= pack( 'C', $_ ) for @{ $color };
	}

	return $output;
}

sub get {
	my $self  = shift;
	my $index = shift;

	return $self->{ data }->[ $index ]; 
}

sub set {
	my $self = shift;
	my ( $index, $rgb ) = @_;

	$self->{ data }->[ $index ] = $rgb; 
}

sub clear {
	my $self = shift;

	$self->{ data } = [];
}

1;