2017-04-25 1 views
1

Je veux faire une copie de l'image avant qui contient plusieurs tranches, comme ceci: image with several slices J'utilise la fonction imagecloneComment copier des tranches dans une image?

image front, img 
front.getfrontimage() 
img=imageclone(front) 
img.showimage() 

Mais il ne copier que les premières tranches. Avoir quelqu'un sait comment faire une copie de ce genre d'image> » < Merci beaucoup ~

Répondre

2

La meilleure façon de dupliquer l'image (quel que soit son affichage) est via son « conteneur » -. ImageDocument ici sont les codes:..

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

Si vous avez besoin de manipuler des tranches individuelles alors il est plus compliqué Espérons que cela aide

+0

Merci beaucoup. Maintenant je sais que je devrais traiter l'image comme imagedocument quand j'ajoute des tranches dans une image. – Renfong

+0

@Renfong: Je ne sais pas quelle version de GMS vous utilisez (toujours utile dans une question), mais sur les dernières installations de GMS il y a quelques "exemples de scripts" pour linePlots dans la section d'aide de F1 " Scripting/Example Scripts/Data Display "concernant les images de type linePlot. – BmyGuest

+0

@BmyGuest, j'utilise GMS 3.20. Merci beaucoup ^^ Je m'en souviendrai la prochaine fois. – Renfong

1

Dans le prolongement de l'accepter (correcte et le meilleur) réponse, il vaut la peine de savoir comment venir d'une "image" à son imageDocument.Vous faites cela comme dans cette e xemple:

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()) 

Notez qu'une image ne pas nécessairement ont un imageDocument. Le document image est uniquement créé lorsque l'image est affichée ou enregistrée. C'est pourquoi la commande est appelée ...GetOrCreate.

De même, un document image peut contenir plusieurs images (ou aucune).

Ceci est un peu compliqué, et cela semble déroutant car la plupart des commandes "correctes" suivant la hiérarchie de classe interne sont enveloppées par des commandes de simplification pour la commodité de script.

f.e. L'enregistrement d'une image à l'aide de SaveSave() prend une variable image, mais il faut vraiment enregistrer une imageDocument. Donc, il en crée/en crée implicitement un. Dans le cas contraire, l'utilisateur aurait besoin de script le script correct, mais plus «compliqué».
Au lieu de:

string path = "C:\\test.dm4" 
image img := GetFrontImage() 
img.SaveImage(path) 

On aurait besoin:

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

Notez également: Alors que la route d'utiliser imageDocuments est la bonne façon, vous devez savoir que « linePlot affiche » sont vraiment spécial. Ce sont des objets imageDisplay pouvant contenir plus d'une image, alors que imageDocuments sont des objets qui peuvent contenir plus d'un imageDisplay. Je le signale afin que vous sachiez que vous devez ajouter de nouvelles images à un affichage d'image pour obtenir plus de tranches dans une image de tranche. Si vous les ajoutez à un document image, vous obtiendrez plusieurs affichages linePlot dans un seul fichier. En fonction de votre niveau de connaissance, je vous recommande de lire la section documentation sur "image/imageDocument/imageDisplay/components" et de tester un peu les choses. Si des questions subsistent, postez-les ici sur StackOverflow: c)