private void LoadTGAExtensionArea(BinaryReader binReader)
{
if (binReader != null && binReader.BaseStream != null && binReader.BaseStream.Length > 0 && binReader.BaseStream.CanSeek == true) {
// is there an Extension Area in file
if (this.objTargaFooter.ExtensionAreaOffset > 0) {
try {
// set the cursor at the beginning of the Extension Area using ExtensionAreaOffset.
binReader.BaseStream.Seek(this.objTargaFooter.ExtensionAreaOffset, SeekOrigin.Begin);
// load the extension area fields from the file
this.objTargaExtensionArea.SetExtensionSize((int)(binReader.ReadInt16()));
this.objTargaExtensionArea.SetAuthorName(System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(TargaConstants.ExtensionAreaAuthorNameByteLength)).TrimEnd('\0'));
this.objTargaExtensionArea.SetAuthorComments(System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(TargaConstants.ExtensionAreaAuthorCommentsByteLength)).TrimEnd('\0'));
// get the date/time stamp of the file
Int16 iMonth = binReader.ReadInt16();
Int16 iDay = binReader.ReadInt16();
Int16 iYear = binReader.ReadInt16();
Int16 iHour = binReader.ReadInt16();
Int16 iMinute = binReader.ReadInt16();
Int16 iSecond = binReader.ReadInt16();
DateTime dtstamp;
string strStamp = iMonth.ToString() + @"/" + iDay.ToString() + @"/" + iYear.ToString() + @" ";
strStamp += iHour.ToString() + @":" + iMinute.ToString() + @":" + iSecond.ToString();
if (DateTime.TryParse(strStamp, out dtstamp) == true)
this.objTargaExtensionArea.SetDateTimeStamp(dtstamp);
this.objTargaExtensionArea.SetJobName(System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(TargaConstants.ExtensionAreaJobNameByteLength)).TrimEnd('\0'));
// get the job time of the file
iHour = binReader.ReadInt16();
iMinute = binReader.ReadInt16();
iSecond = binReader.ReadInt16();
TimeSpan ts = new TimeSpan((int)iHour, (int)iMinute, (int)iSecond);
this.objTargaExtensionArea.SetJobTime(ts);
this.objTargaExtensionArea.SetSoftwareID(System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(TargaConstants.ExtensionAreaSoftwareIDByteLength)).TrimEnd('\0'));
// get the version number and letter from file
float iVersionNumber = (float)binReader.ReadInt16() / 100.0F;
string strVersionLetter = System.Text.Encoding.ASCII.GetString(binReader.ReadBytes(TargaConstants.ExtensionAreaSoftwareVersionLetterByteLength)).TrimEnd('\0');
this.objTargaExtensionArea.SetSoftwareID(iVersionNumber.ToString(@"F2") + strVersionLetter);
// get the color key of the file
int a = (int)binReader.ReadByte();
int r = (int)binReader.ReadByte();
int b = (int)binReader.ReadByte();
int g = (int)binReader.ReadByte();
this.objTargaExtensionArea.SetKeyColor(Color.FromArgb(a, r, g, b));
this.objTargaExtensionArea.SetPixelAspectRatioNumerator((int)binReader.ReadInt16());
this.objTargaExtensionArea.SetPixelAspectRatioDenominator((int)binReader.ReadInt16());
this.objTargaExtensionArea.SetGammaNumerator((int)binReader.ReadInt16());
this.objTargaExtensionArea.SetGammaDenominator((int)binReader.ReadInt16());
this.objTargaExtensionArea.SetColorCorrectionOffset(binReader.ReadInt32());
this.objTargaExtensionArea.SetPostageStampOffset(binReader.ReadInt32());
this.objTargaExtensionArea.SetScanLineOffset(binReader.ReadInt32());
this.objTargaExtensionArea.SetAttributesType((int)binReader.ReadByte());
// load Scan Line Table from file if any
if (this.objTargaExtensionArea.ScanLineOffset > 0) {
binReader.BaseStream.Seek(this.objTargaExtensionArea.ScanLineOffset, SeekOrigin.Begin);
for (int i = 0; i < this.objTargaHeader.Height; i++) {
this.objTargaExtensionArea.ScanLineTable.Add(binReader.ReadInt32());
}
}
// load Color Correction Table from file if any
if (this.objTargaExtensionArea.ColorCorrectionOffset > 0) {
binReader.BaseStream.Seek(this.objTargaExtensionArea.ColorCorrectionOffset, SeekOrigin.Begin);
for (int i = 0; i < TargaConstants.ExtensionAreaColorCorrectionTableValueLength; i++) {
a = (int)binReader.ReadInt16();
r = (int)binReader.ReadInt16();
b = (int)binReader.ReadInt16();
g = (int)binReader.ReadInt16();
this.objTargaExtensionArea.ColorCorrectionTable.Add(Color.FromArgb(a, r, g, b));
}
}
} catch {
this.ClearAll();
throw;
}
}
} else {
this.ClearAll();
throw new Exception(@"Error loading file, could not read file from disk.");
}
}