Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Purpose: Implementation of the CPCIDSK_LUT class. 4 : * 5 : ****************************************************************************** 6 : * Copyright (c) 2015 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/cpcidsklut.h" 14 : #include <cassert> 15 : #include <cstring> 16 : 17 : using namespace PCIDSK; 18 : 19 : /************************************************************************/ 20 : /* CPCIDSK_LUT() */ 21 : /************************************************************************/ 22 : 23 0 : CPCIDSK_LUT::CPCIDSK_LUT( PCIDSKFile *fileIn, int segmentIn, 24 0 : const char *segment_pointer ) 25 0 : : CPCIDSKSegment( fileIn, segmentIn, segment_pointer ) 26 : 27 : { 28 0 : } 29 : 30 : /************************************************************************/ 31 : /* ~CPCIDSKGeoref() */ 32 : /************************************************************************/ 33 : 34 0 : CPCIDSK_LUT::~CPCIDSK_LUT() 35 : 36 : { 37 0 : } 38 : 39 : /************************************************************************/ 40 : /* ReadLUT() */ 41 : /************************************************************************/ 42 : 43 0 : void CPCIDSK_LUT::ReadLUT(std::vector<unsigned char>& lut) 44 : 45 : { 46 0 : PCIDSKBuffer seg_data; 47 : 48 0 : seg_data.SetSize(256*4); 49 : 50 0 : ReadFromFile( seg_data.buffer, 0, 256*4); 51 : 52 0 : lut.resize(256); 53 0 : for( int i = 0; i < 256; i++ ) 54 : { 55 0 : lut[i] = (unsigned char) seg_data.GetInt(0+i*4, 4); 56 : } 57 0 : } 58 : 59 : /************************************************************************/ 60 : /* WriteLUT() */ 61 : /************************************************************************/ 62 : 63 0 : void CPCIDSK_LUT::WriteLUT(const std::vector<unsigned char>& lut) 64 : 65 : { 66 0 : if(lut.size() != 256) 67 : { 68 0 : throw PCIDSKException("LUT must contain 256 entries (%d given)", static_cast<int>(lut.size())); 69 : } 70 : 71 0 : PCIDSKBuffer seg_data; 72 : 73 0 : seg_data.SetSize(256*4); 74 : 75 0 : ReadFromFile( seg_data.buffer, 0, 256*4 ); 76 : 77 : int i; 78 0 : for( i = 0; i < 256; i++ ) 79 : { 80 0 : seg_data.Put( (int) lut[i], i*4, 4); 81 : } 82 : 83 0 : WriteToFile( seg_data.buffer, 0, 256*4 ); 84 0 : }