Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Purpose: Implementation of the CPCIDSK_PCT class. 4 : * 5 : ****************************************************************************** 6 : * Copyright (c) 2009 7 : * PCI Geomatics, 90 Allstate Parkway, Markham, Ontario, Canada. 8 : * 9 : * SPDX-License-Identifier: MIT 10 : ****************************************************************************/ 11 : 12 : #include "pcidsk_exception.h" 13 : #include "segment/cpcidskpct.h" 14 : #include <cassert> 15 : #include <cstring> 16 : 17 : using namespace PCIDSK; 18 : 19 : PCIDSK_PCT::~PCIDSK_PCT() = default; 20 : 21 : /************************************************************************/ 22 : /* CPCIDSK_PCT() */ 23 : /************************************************************************/ 24 : 25 2 : CPCIDSK_PCT::CPCIDSK_PCT( PCIDSKFile *fileIn, int segmentIn, 26 2 : const char *segment_pointer ) 27 2 : : CPCIDSKSegment( fileIn, segmentIn, segment_pointer ) 28 : 29 : { 30 2 : } 31 : 32 : /************************************************************************/ 33 : /* ~CPCIDSKGeoref() */ 34 : /************************************************************************/ 35 : 36 4 : CPCIDSK_PCT::~CPCIDSK_PCT() 37 : 38 : { 39 4 : } 40 : 41 : /************************************************************************/ 42 : /* ReadPCT() */ 43 : /************************************************************************/ 44 : 45 1 : void CPCIDSK_PCT::ReadPCT( unsigned char pct[768] ) 46 : 47 : { 48 2 : PCIDSKBuffer seg_data; 49 : 50 1 : seg_data.SetSize( 768*4 ); 51 : 52 1 : ReadFromFile( seg_data.buffer, 0, 768*4 ); 53 : 54 : int i; 55 257 : for( i = 0; i < 256; i++ ) 56 : { 57 256 : pct[ 0+i] = (unsigned char) seg_data.GetInt( 0+i*4, 4 ); 58 256 : pct[256+i] = (unsigned char) seg_data.GetInt(1024+i*4, 4 ); 59 256 : pct[512+i] = (unsigned char) seg_data.GetInt(2048+i*4, 4 ); 60 : } 61 1 : } 62 : 63 : /************************************************************************/ 64 : /* WritePCT() */ 65 : /************************************************************************/ 66 : 67 1 : void CPCIDSK_PCT::WritePCT( unsigned char pct[768] ) 68 : 69 : { 70 2 : PCIDSKBuffer seg_data; 71 : 72 1 : seg_data.SetSize( 768*4 ); 73 : 74 1 : ReadFromFile( seg_data.buffer, 0, 768*4 ); 75 : 76 : int i; 77 257 : for( i = 0; i < 256; i++ ) 78 : { 79 256 : seg_data.Put( (int) pct[ 0+i], 0+i*4, 4 ); 80 256 : seg_data.Put( (int) pct[256+i],1024+i*4, 4 ); 81 256 : seg_data.Put( (int) pct[512+i],2048+i*4, 4 ); 82 : } 83 : 84 1 : WriteToFile( seg_data.buffer, 0, 768*4 ); 85 1 : }