get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1 (Operator)

Name

get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1 — Zugriff auf den Zeiger eines Kanals.

Signatur

get_image_pointer1(Image : : : Pointer, Type, Width, Height)

Herror get_image_pointer1(const Hobject Image, Hlong* Pointer, char* Type, Hlong* Width, Hlong* Height)

Herror T_get_image_pointer1(const Hobject Image, Htuple* Pointer, Htuple* Type, Htuple* Width, Htuple* Height)

void GetImagePointer1(const HObject& Image, HTuple* Pointer, HTuple* Type, HTuple* Width, HTuple* Height)

HTuple HImage::GetImagePointer1(HTuple* Type, HTuple* Width, HTuple* Height) const

void* HImage::GetImagePointer1(HString* Type, Hlong* Width, Hlong* Height) const

static void HOperatorSet.GetImagePointer1(HObject image, out HTuple pointer, out HTuple type, out HTuple width, out HTuple height)

HTuple HImage.GetImagePointer1(out HTuple type, out HTuple width, out HTuple height)

IntPtr HImage.GetImagePointer1(out string type, out int width, out int height)

Beschreibung

get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1GetImagePointer1 liefert einen Pointer auf den ersten Kanal des Bildes ImageImageImageImageimage. Außerdem wird der Bildtyp (TypeTypeTypeTypetype = 'byte', 'int2', 'uint2' etc.) und die Bildgröße (Breite und Höhe) ausgegeben. In der Folge ist dann über den Zeiger ein direkter Zugriff auf die Bilddaten in der HALCON-Datenbank von der Programmiersprache aus möglich, in der HALCON verwendet wird. Ein Bild wird in HALCON zeilenweise linearisiert abgespeichert. Die Bildtypen 'complex' und 'vector_field' bilden Sonderfälle. Bilder vom Typ 'complex' sind interleaved, d.h., die Real- und Imaginärteile werden abwechselnd abgespeichert. Bilder vom Typ 'vector_field' bestehen dagegen aus zwei Matrizen, eine für die Zeilen und eine für die Spalten, die nacheinander in der HALCON-Datenbank liegen.

Achtung

Der von get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1GetImagePointer1 zurückgegebene Zeiger darf nur so lange verwendet werden, solange das Bildobjekt existiert. Das ist der Fall, solange die zugehörige Variable in der Programmiersprache, in der HALCON verwendet wird, gültig ist. Wird dies nicht berücksichtigt, kann es zu unerwartetem Verhalten und zu Programmabstürzen kommen.

Werden über den Zeiger Daten in ein existierendes Bild geschrieben, so werden alle Bildobjekte modifiziert, die das Bild referenzieren. Wenn z.B. mit reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain der Definitionsbereich eines Bildes eingeschränkt wird, so benutzen das originale Bildobjekt mit dem vollen Definitionsbereich und das Bildobjekt mit dem eingeschränkten Definitionsbereich dieselbe Bildmatrix (d.h. get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1GetImagePointer1 liefert für die beiden Bilder denselben Zeiger zurück). Falls also eines der beiden Bilder in diesem Beispiel überschrieben wird, werden beide Bildobjekte modifiziert. Falls der Zeiger in der Programmiersprache, in der HALCON verwendet wird, dazu benutzt wird, Bilddaten zu schreiben, sollten daher die Bilddaten in ein Bildobjekt geschrieben werden, das neu erzeugt worden ist, z.B. mit gen_image1gen_image1GenImage1GenImage1GenImage1. Bei mehrkanaligen Eingabebildern wird der Bildtyp und der Pointer des ersten Kanals zurückgegeben.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / direction / cyclic / int1 / int2 / uint2 / int4 / int8 / real / complex / vector_field)

Eingabebild.

PointerPointerPointerPointerpointer (output_control)  pointer(-array) HTupleHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)

Zeiger auf die Bilddaten in der HALCON-Datenbank.

TypeTypeTypeTypetype (output_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Typ des Bildes.

Werteliste: 'byte'"byte""byte""byte""byte", 'complex'"complex""complex""complex""complex", 'cyclic'"cyclic""cyclic""cyclic""cyclic", 'direction'"direction""direction""direction""direction", 'int1'"int1""int1""int1""int1", 'int2'"int2""int2""int2""int2", 'int4'"int4""int4""int4""int4", 'int8'"int8""int8""int8""int8", 'real'"real""real""real""real", 'uint2'"uint2""uint2""uint2""uint2", 'vector_field_absolute'"vector_field_absolute""vector_field_absolute""vector_field_absolute""vector_field_absolute", 'vector_field_relative'"vector_field_relative""vector_field_relative""vector_field_relative""vector_field_relative"

WidthWidthWidthWidthwidth (output_control)  extent.x(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite des Bildes.

HeightHeightHeightHeightheight (output_control)  extent.y(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe des Bildes.

Beispiel (C)

Hobject  Image;
char     typ[128];
Hlong     width,height;
unsigned char *ptr;

read_image(&Image,"fabrik");
get_image_pointer1(Image,(Hlong*)&ptr,typ,&width,&height);

Ergebnis

get_image_pointer1get_image_pointer1GetImagePointer1GetImagePointer1GetImagePointer1 liefert den Wert 2 (H_MSG_TRUE), falls genau ein Bild übergeben wurde. Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

read_imageread_imageReadImageReadImageReadImage

Alternativen

set_grayvalset_grayvalSetGrayvalSetGrayvalSetGrayval, get_grayvalget_grayvalGetGrayvalGetGrayvalGetGrayval, get_image_pointer3get_image_pointer3GetImagePointer3GetImagePointer3GetImagePointer3, get_image_sizeget_image_sizeGetImageSizeGetImageSizeGetImageSize, get_image_typeget_image_typeGetImageTypeGetImageTypeGetImageType

Siehe auch

paint_regionpaint_regionPaintRegionPaintRegionPaintRegion, paint_graypaint_grayPaintGrayPaintGrayPaintGray

Modul

Foundation