私は.tifにLibTiff.Netを使用しましたが、他のフォーマットは必要ありませんでした。 UpperLeftおよびBottomRightプロパティは、ワールドマップ上にイメージを配置するために使用されます。私はモデルの変換ケースを扱っていません。なぜなら、それは非常に複雑であり、現時点ではそうする必要はないからです。
var imageStreamSource = new FileStream(Filename, FileMode.Open, FileAccess.Read, FileShare.Read);
var decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
var bitmapSource = decoder.Frames[0];
// Draw the Image
Image = bitmapSource.ToBitmap();
using (var tiff = Tiff.Open(Filename, "r"))
{
Height = tiff.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
Width = tiff.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
// see http://www.remotesensing.org/geotiff/spec/geotiff2.6.html#2.6.1
var modelPixelScaleTag = tiff.GetField(TiffTag.GEOTIFF_MODELPIXELSCALETAG);
var modelTiepointTag = tiff.GetField(TiffTag.GEOTIFF_MODELTIEPOINTTAG);
//var modelTransformTag = tiff.GetField(TiffTag.GEOTIFF_MODELTRANSFORMATIONTAG);
var modelPixelScale = modelPixelScaleTag[1].GetBytes();
var ScaleX = BitConverter.ToDouble(modelPixelScale, 0);
var ScaleY = BitConverter.ToDouble(modelPixelScale, 8) * -1;
if (modelTiepointTag != null)
{
var modelTransformation = modelTiepointTag[1].GetBytes();
var originLon = BitConverter.ToDouble(modelTransformation, 24);
var originLat = BitConverter.ToDouble(modelTransformation, 32);
// origin is the center of the pixel, so offset to
var startLat = originLat + (ScaleY/2.0);
var startLon = originLon + (ScaleX/2.0);
UpperLeft = new Position(startLat, startLon);
BottomRight = new Position(startLat + ScaleY * Height, startLon + ScaleX * Width);
}
//else if (modelTransformTag != null)
//{
// this is very complicated
//}
else
{
throw new Exception("Couldn't understand the TIFF format");
}
}
私は、私はこの質問は、プログラミングとし、特定のC#で行うには何を持っている疑いので、オフトピックとして、この質問を閉じるために投票していますので、私はここに投稿をお勧めします:gis.stackexchange.com – HimBromBeere
@HimBromBeereでその場合、NetTopologySuiteのみについての質問(Stackoverflowにはタグがあります)に焦点を当てて、それを維持しようとします。私の問題は純粋にC#に関連しており、これが私がStackoverflowを選んだ理由です。私は完全に同意しないと言っているわけではありませんが、少なくともそれは少し微妙だと思います。 –