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 : /************************************************************************/ 20 : /* CPCIDSK_PCT() */ 21 : /************************************************************************/ 22 : 23 2 : CPCIDSK_PCT::CPCIDSK_PCT( PCIDSKFile *fileIn, int segmentIn, 24 2 : const char *segment_pointer ) 25 2 : : CPCIDSKSegment( fileIn, segmentIn, segment_pointer ) 26 : 27 : { 28 2 : } 29 : 30 : /************************************************************************/ 31 : /* ~CPCIDSKGeoref() */ 32 : /************************************************************************/ 33 : 34 4 : CPCIDSK_PCT::~CPCIDSK_PCT() 35 : 36 : { 37 4 : } 38 : 39 : /************************************************************************/ 40 : /* ReadPCT() */ 41 : /************************************************************************/ 42 : 43 1 : void CPCIDSK_PCT::ReadPCT( unsigned char pct[768] ) 44 : 45 : { 46 2 : PCIDSKBuffer seg_data; 47 : 48 1 : seg_data.SetSize( 768*4 ); 49 : 50 1 : ReadFromFile( seg_data.buffer, 0, 768*4 ); 51 : 52 : int i; 53 257 : for( i = 0; i < 256; i++ ) 54 : { 55 256 : pct[ 0+i] = (unsigned char) seg_data.GetInt( 0+i*4, 4 ); 56 256 : pct[256+i] = (unsigned char) seg_data.GetInt(1024+i*4, 4 ); 57 256 : pct[512+i] = (unsigned char) seg_data.GetInt(2048+i*4, 4 ); 58 : } 59 1 : } 60 : 61 : /************************************************************************/ 62 : /* WritePCT() */ 63 : /************************************************************************/ 64 : 65 1 : void CPCIDSK_PCT::WritePCT( unsigned char pct[768] ) 66 : 67 : { 68 2 : PCIDSKBuffer seg_data; 69 : 70 1 : seg_data.SetSize( 768*4 ); 71 : 72 1 : ReadFromFile( seg_data.buffer, 0, 768*4 ); 73 : 74 : int i; 75 257 : for( i = 0; i < 256; i++ ) 76 : { 77 256 : seg_data.Put( (int) pct[ 0+i], 0+i*4, 4 ); 78 256 : seg_data.Put( (int) pct[256+i],1024+i*4, 4 ); 79 256 : seg_data.Put( (int) pct[512+i],2048+i*4, 4 ); 80 : } 81 : 82 1 : WriteToFile( seg_data.buffer, 0, 768*4 ); 83 1 : }