Dcm teilweise übereinander

Hallo,
ich würde gern dcm mergen, aber einen Teil übereinanderlegen. Irgendwie schaffe ich das nicht.
Danke für eine Hilfe.

@Koebiroebi

Könnten Sie bitte mehr Informationen darüber geben, welche spezifischen DCM-Dateien Sie zusammenführen möchten und welche Methode oder Bibliothek Sie verwenden?

Ich verwende “Zusammenführen” und habe einfach normale dcm-Bilder (Röntgenbilder).

Hallo, @Koebiroebi
Vielen Dank für Ihr Interesse an Aspose.Imaging.
Könnten Sie bitte den Text des Fehlers senden, auf den Sie stoßen? Oder wissen Sie nicht, wie man Code dafür schreibt? Vielleicht ist der unten stehende Link hilfreich für Sie.

Sie müssen nur das Tiff-Image durch DicomImage ersetzen

Hallo,
Es gibt keinen Fehler. Ich kann die beiden Bilder nur aneinander, aber nicht übereinander legen.

Ich verstehe Sie. Ich bereite Ihnen jetzt ein Beispiel vor.

Oh, sehr nett! Danke.

Hallo!
Ich entschuldige mich für die Verzögerung.
Tatsache ist, dass das Dicom-Format den Alphakanal der Transparenz nicht unterstützt.
Wenn Sie daher ein Dicom über ein anderes zeichnen, sehen Sie nur die oberste Ebene,
der untere wird abgerieben.
Aspose.Imaging verfügt über verschiedene Werkzeuge, um ein Bild über ein anderes zu zeichnen, wobei der vorhandene Alphakanal geändert wird. Sie können auch den ImageAttribute-Mechanismus zum Zeichnen in Graphics verwenden.
Jede dieser Optionen hat ihre eigenen Vor- und Nachteile.
Im Folgenden sind 3 Beispiele für ihre Verwendung aufgeführt.

RasterImage.Blend

using (DicomImage background = (DicomImage)Image.Load("background.dcm"))
{
	using (DicomImage foreground = (DicomImage)Image.Load("foreground.dcm"))
	{
		DicomPage[] bgPages = background.DicomPages;
		DicomPage[] fgPages = foreground.DicomPages;
		int minPages = Math.min(bgPages.Length, fgPages.Length);
		for (int i = 0; i < minPages; i++)
		{
			// Put the foreground page upon to background page at position 0,0
			bgPages[i].Blend(new Point(0, 0), fgPages[i], 128); // semi-transparent
		}
		background.Save("overrided-blended.dcm");
	}
}

RasterImage.ReplaceColor

using (DicomImage background = (DicomImage)Image.Load("background.dcm"))
{
	using (DicomImage foreground = (DicomImage)Image.Load("foreground.dcm"))
	{
		DicomPage[] bgPages = background.DicomPages;
		DicomPage[] fgPages = foreground.DicomPages;
		int minPages = Math.min(bgPages.Length, fgPages.Length);
		for (int i = 0; i < minPages; i++)
		{
			var foregroundPage = fgPages[i];
			// Replace the black color by completely transparent on the foreground page
			foregroundPage.ReplaceColor(Color.Black, 10, Color.Empty);
			// Draw the foreground page upon to background page at position 0,0
			Aspose.Imaging.Graphics gr = new (bgPages[i]);
			gr.DrawImage(foregroundPage, 0, 0);
		}
		background.Save("overrided-replace-colore.dcm");
	}
}

RasterImage.ReplaceColor

using (DicomImage background = (DicomImage)Image.Load("background.dcm"))
{
	using (DicomImage foreground = (DicomImage)Image.Load("foreground.dcm"))
	{
		DicomPage[] bgPages = background.DicomPages;
		DicomPage[] fgPages = foreground.DicomPages;
		int minPages = Math.min(bgPages.Length, fgPages.Length);
		for (int i = 0; i < minPages; i++)
		{
			var foregroundPage = fgPages[i];
			ImageAttributes attribs = new();
			// Initialize the color matrix for color transformations.
			ColorMatrix myColorMatrix = new ColorMatrix();

			// Red
			myColorMatrix.Matrix00 = 1.00f;

			// Green
			myColorMatrix.Matrix11 = 1.00f;

			// Blue
			myColorMatrix.Matrix22 = 1.00f;

			// alpha
			myColorMatrix.Matrix33 = 0.50f; // semi-transparent

			// w
			myColorMatrix.Matrix44 = 1.00f;
			attribs.SetColorMatrix(myColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
			gr.DrawImage(foregroundPage, new Rectangle(0, 0, foregroundPage.Width, foregroundPage.Height), GraphicsUnit.Pixel, attribs);
		}
		background.Save("overrided-using-attributes.dcm");
	}
}

PS: Ich würde gerne verstehen, warum Sie 1 Dicom über das andere zeichnen müssen. Wenn es nicht schwierig ist, senden Sie Ihren Code oder erklären Sie, welches Endergebnis Sie sehen möchten. In diesem Fall kann ich Ihnen besser helfen.

Respektvoll,
Evgeniy Sidenko

Vielen Dank für Ihre ausführliche Antwort.
Es soll das untere Bild nicht sichtbar sein. Die beiden Bilder sehen Sie im Anhang. Ich muss sie zusammensetzen, weil mein Scanner zu klein ist, um das ganze Bild zu scannen.
dicom.jpg (68,3 KB)
Verstehen Sie jetzt? Ich schaffe es nicht, die beiden Bilder übereinander zu legen.

Es stellt sich heraus, dass Sie zwei Bilder nähen müssen?
Dann müssen Sie wissen, von welcher vertikalen Position (Y) wir das zweite Bild andocken müssen. Ein Beispiel dafür, wie dies möglich ist, werde ich später schreiben.

Guten Tag
Vielen Dank.
Früher konnte ich die Bilder einfach physisch übereinanderschieben (mit dem Verschiebewerkzeug), bis sie richtig zusammen passten. Geht das jetzt nicht mehr?

Guten Tag.
Verschiebewerkzeug? Ich bin mir nicht sicher, ob ich verstehe, um welches Instrument es sich handelt.

Das Verschiebewerkzeug ist das:
Screenshot_20241108_215411_Firefox.jpg (86,6 KB)

@Koebiroebi , Vielen Dank, wir werden das, was Sie gesendet haben, prüfen und Ihnen bald antworten