現時点では、データの配列を取得する方法として C# 文字列を受け入れている非常に苦痛なライブラリがあります。どうやら、これにより pinvokes のマーシャリングが容易になります。
では、ushort 配列をバイト単位で文字列にするにはどうすればよいでしょうか。私はもう試した:
int i;
String theOutData = "";
ushort[] theImageData = inImageData.DataArray;
//this is as slow like molasses in January
for (i = 0; i < theImageData.Length; i++) {
byte[] theBytes = System.BitConverter.GetBytes(theImageData[i]);
theOutData += String.Format("{0:d}{1:d}", theBytes[0], theBytes[1]);
}
私はこのようにそれを行うことができますが、それはまともな時間に近いものではありません.
ここで何をすべきですか?安全ではないですか?ある種の IntPtr 中間体を通過しますか?
C++ の char* である場合、これは非常に簡単になります...
編集:関数呼び出しは
DataElement.SetByteValue(string inArray, VL Length);
ここで、VL は DICOM タイプの「値の長さ」であり、関数自体は SWIG によって C++ ライブラリへのラッパーとして生成されます。マネージド/アンマネージド境界を比較的簡単に越えることができるため、選択された表現は文字列のようですが、プロジェクト (これは GDCM) の C++ コード全体で、char* は単にバイト バッファーとして使用されます。したがって、イメージ バッファー ポインターを設定する場合、C++ ではかなり単純ですが、C# ではこの奇妙な問題に悩まされています。
これはハッキングであり、おそらく最善の方法は SWIG ライブラリを正しく動作させることであることを私は知っています。私は本当にそれを行う方法がわかりません.C#側での簡単な回避策があれば、それを望んでいます。