2017-04-25 18 views

答えて

2

画像を(それが表示されているに関係なく、どのように)その経由で複製する最も簡単な方法は、 『イメージ>のこの種のコピーを作成する方法を知っているコンテナ』 - 。ImageDocumentこちらコードは以下のとおりです。。

ImageDocument imgDoc = GetFrontImageDocument(); 
number DoDeepCopy = 1; 
ImageDocument newDoc = imgDoc.ImageDocumentClone(DoDeepCopy); 
newDoc.ImageDocumentShow(); 

あなたは個々のスライスを操作する必要がある場合は、それはより複雑である。この情報がお役に立てば幸い

+0

ありがとうございます。今私はイメージにスライスを追加するときにイメージを画像として扱うべきであることを知っています。 – Renfong

+0

@Renfong:使用しているGMSのバージョンがわかりません(質問でこれを述べるのは良いことです)。しかし、最新のGMSインストールでは、F1ヘルプセクションのlinePlots用のサンプルスクリプトがかなりあります。 linePlotタイプのイメージに関する「スクリプト/サンプルスクリプト/データ表示」を参照してください。 – BmyGuest

+0

@BmyGuest、私はGMS 3.20を使用します。ありがとうございました^^次回は覚えています。 – Renfong

1

受け入れ(正しいと最高の)答えの拡張では、それが来る方法を知る価値があります「イメージ」からそのimageDocumentに移動します。これは、このeのように行いますXAMPLE:

ClearResults() 

image frontImg := GetFrontImage() 
imageDocument frontDoc = GetFrontImageDocument() 
Result("Grapped from application:") 
Result("\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + frontImg.ImageGetID()) 
Result("\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + frontDoc.ImageDocumentGetID()) 

imageDocument docFromImg = frontImg.ImageGetOrCreateImageDocument() 
Result("\n Taken from image:") 
Result("\n\t Doc : " + frontDoc.ImageDocumentGetName() + "\t ID = " + docFromImg.ImageDocumentGetID()) 

image imgFromDoc := frontDoc.ImageDocumentGetImage(0) 
Result("\n Taken from imageDocument:") 
Result("\n\t Image: " + frontImg.ImageGetLabel() + "\t ID = " + imgFromDoc.ImageGetID()) 

注意画像は必ずしも imageDocumentを持っていないこと。 imageDocumentは、イメージが表示または保存されるときにのみ作成されます。そのため、コマンドは...GetOrCreateとなります。

同様に、imageDocumentには複数の画像が含まれていても、いなくてもかまいません。

これは少し畳み込まれており、内部クラス階層に続く「正しい」コマンドの多くがスクリプトの利便性のための簡略化コマンドで囲まれているので混乱しているように見えます。

f.e. SaveSave()を使用して画像を保存すると、imageという変数が必要ですが、実際にはimageDocumentを保存する必要があります。それで、暗黙のうちにそれを取得/作成します。それ以外の場合、ユーザーは正しい、しかしより複雑なスクリプトをスクリプト化する必要があります。
の代わりに:

一つは、必要があるだろう
string path = "C:\\test.dm4" 
image img := GetFrontImage() 
img.SaveImage(path) 

string path = "C:\\test.dm4" 
string handler = "Gatan Format" 
image img := GetFrontImage() 
imageDocument doc = img.ImageGetOrCreateImageDocument() 
doc.ImageDocumentSaveToFile(handler, path) 

も注意してください。imageDocumentsを使用してのルートが正しい方法ですが、あなたは本当に特別なもの「linePlotが表示される」ことを知っている必要があります。 imageDisplayオブジェクトは複数のイメージを含むことができるimageDisplayオブジェクトですが、imageDocumentsは複数のimageDisplayを含むオブジェクトです。私はこれを指摘しているので、スライス画像でより多くのスライスを取得するには、新しい画像をimageDisplayに追加する必要があることを知っておく必要があります。それらをimageDocumentに追加すると、1つのファイルに複数のlinePlotディスプレイが表示されます。

このすべてを知る必要がある「深い」方法に応じて、「image/imageDocument/imageDisplay/components」のドキュメントセクションを読んで、少しテストすることをお勧めします。質問が残っている場合はStackOverflowでここに投稿してください:c)

関連する問題