Bildbereiche kopieren

In diesem Beispiel werden zwei Bilder in ein anderes Bild kopiert, wobei verschiedene Methoden genutzt werden:

Erläuterung

Mit den unten gezeigten Methoden können beliebige, rechteckige Bildbereiche zwischen Bildern ausgetauscht werden. Bei Bedarf kann dies mit Hilfe von arithmetischen Bild-Operationen auch teil-transparent geschehen.

Die Funktion F_VN_CopyImageRegionToRegion nimmt zwei Bilder und entsprechend zwei Bildregionen entgegen und kopiert den Inhalt der einen Bildregion entsprechend in die andere. Beide Bildregionen haben die gleiche Größe und müssen jeweils vollständig im Bild vorhanden sein. Die Funktion wird im Beispiel zum Kopieren des roten Bildes in das Mischbild verwendet. Zum Kopieren des blauen Bildes wird hingegen eine ausprogrammierte Version mit gleicher Funktionalität genutzt. Der Vorteil dieser Version ist, dass anstatt einer Kopie auch eine Vermischung des blauen und des Mischbilds möglich ist.

Im Beispiel kann die Position der beiden kopierten Bilder über die Variablen aPositionRed und aPositionBlue verändert werden. Der Parameter bCopyBlue bestimmt, ob das blaue Bild kopiert oder vermischt wird.

Variablen

hr                :   HRESULT;

ipImageMerge      :   ITcVnImage;
ipImageRed        :   ITcVnImage;
ipImageBlue       :   ITcVnImage;
ipImageMergeDisp  :   ITcVnDisplayableImage;

aBlack            :   TcVnVector4_LREAL := [0, 0, 0];
aRed              :   TcVnVector4_LREAL := [255, 0, 0];
aBlue             :   TcVnVector4_LREAL := [0, 0, 255];

aPositionRed      :   TcVnPoint := [20, 20];
aPositionBlue     :   TcVnPoint := [480, 480];
bCopyBlue         :   BOOL := FALSE;

Programm

// create images & set colors
hr := F_VN_CreateImageAndSetPixels(ipImageMerge, 1000, 1000, TCVN_ET_USINT, 3, aBlack, hr);
hr := F_VN_CreateImageAndSetPixels(ipImageRed, 500, 500, TCVN_ET_USINT, 3, aRed, hr);
hr := F_VN_CreateImageAndSetPixels(ipImageBlue, 500, 500, TCVN_ET_USINT, 3, aBlue, hr);

// Copy red image to selected region in merge-image
hr := F_VN_CopyImageRegionToRegion(
    ipSrcImage  :=  ipImageRed,
    nXSrc       :=  0,      nYSrc   :=  0,
    nWidth      :=  500,    nHeight :=  500,
    ipDestImage :=  ipImageMerge,
    nXDest      :=  aPositionRed[0],
    nYDest      :=  aPositionRed[1],
    hrPrev      :=  hr
);

// Copy or mix blue image to selected region in merge-image
hr := F_VN_SetRoi(aPositionBlue[0], aPositionBlue[1], 500, 500, ipImageMerge, hr);
IF bCopyBlue THEN
    hr := F_VN_CopyImage(ipImageBlue, ipImageMerge, hr);
ELSE
    hr := F_VN_AddImages(ipImageBlue, ipImageMerge, ipImageMerge, hr);
END_IF
hr := F_VN_ResetRoi(ipImageMerge, hr);

hr := F_VN_TransformIntoDisplayableImage(ipImageMerge, ipImageMergeDisp, hr);

Ergebnis

Folgend sind beispielhaft Ergebnisse des Programms abgebildet. Bei den Bildern Links und Mitte wurde das blaue Quadrat addiert, beim Bild Rechts wurde es kopiert. Zudem sind die Ziel-Positionen der Quadrate unterschiedlich.

Bildbereiche kopieren 1:

Ähnliche Beispiele

Mehrere Bilder zusammenfügen