gen_image3_externgen_image3_externGenImage3ExternGenImage3Externgen_image3_extern (Operator)
Name
gen_image3_externgen_image3_externGenImage3ExternGenImage3Externgen_image3_extern — Erzeugen eines dreikanaligen Bildes aus drei Zeigern auf Pixel
(mit Speicherverwaltung).
Signatur
Herror gen_image3_extern(Hobject* Image, const char* Type, const Hlong Width, const Hlong Height, const Hlong PointerRed, const Hlong PointerGreen, const Hlong PointerBlue, const Hlong ClearProc)
Herror T_gen_image3_extern(Hobject* Image, const Htuple Type, const Htuple Width, const Htuple Height, const Htuple PointerRed, const Htuple PointerGreen, const Htuple PointerBlue, const Htuple ClearProc)
void GenImage3Extern(HObject* Image, const HTuple& Type, const HTuple& Width, const HTuple& Height, const HTuple& PointerRed, const HTuple& PointerGreen, const HTuple& PointerBlue, const HTuple& ClearProc)
void HImage::GenImage3Extern(const HString& Type, Hlong Width, Hlong Height, void* PointerRed, void* PointerGreen, void* PointerBlue, void* ClearProc)
void HImage::GenImage3Extern(const char* Type, Hlong Width, Hlong Height, void* PointerRed, void* PointerGreen, void* PointerBlue, void* ClearProc)
void HImage::GenImage3Extern(const wchar_t* Type, Hlong Width, Hlong Height, void* PointerRed, void* PointerGreen, void* PointerBlue, void* ClearProc)
(Nur Windows)
static void HOperatorSet.GenImage3Extern(out HObject image, HTuple type, HTuple width, HTuple height, HTuple pointerRed, HTuple pointerGreen, HTuple pointerBlue, HTuple clearProc)
void HImage.GenImage3Extern(string type, int width, int height, IntPtr pointerRed, IntPtr pointerGreen, IntPtr pointerBlue, IntPtr clearProc)
Beschreibung
gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Externgen_image3_extern erzeugt ein Dreikanalbild in der Größe
WidthWidthWidthWidthwidthwidth * HeightHeightHeightHeightheightheight.
Die Pixel in PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green und
PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue sind zeilensequentiell abgelegt.
Der Typ der übergebenen Pixel muss mit TypeTypeTypeTypetypetype übereinstimmen
(siehe gen_image_constgen_image_constGenImageConstGenImageConstGenImageConstgen_image_const für eine detailliertere Beschreibung
der Pixeltypen).
Wie ein Zeigerwert übergeben wird hängt von der benutzten Operatorsignatur
und der Programmierumgebung ab. Es ist sicherzustellen, dass die tatsächliche
Speicheradresse unter der die Bilddaten gespeichert sind übergeben wird und
nicht die Adresse der Zeigervariablen. Es ist darauf zu achten, dass
64-Bit-Zeiger auf 64-Bit-Architekturen nicht beschnitten werden.
Der Speicher für das neue Bild wird von HALCON im Gegensatz
zu gen_image3gen_image3GenImage3GenImage3GenImage3gen_image3 nicht neu angelegt
und damit auch nicht kopiert.
Der Speicherplatz auf den (PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green,
PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue) zeigt, muss also
beim Löschen des Objektes ImageImageImageImageimageimage freigegeben werden.
Dies geschieht durch die, vom Aufrufer zur Verfügung gestellte,
Prozedur ClearProcClearProcClearProcClearProcclearProcclear_proc. Diese Prozedur muss folgende
Signatur haben
void ClearProc(void* ptr);
und wird beim Löschen von ImageImageImageImageimageimage mit der
__cdecl Aufrufkonvention aufgerufen.
Falls der Speicher nicht freigegeben werden soll (im Fall
von Framegrabbern oder statischem Speicher), kann eine
Prozedur "ohne Rumpf" oder der NULL-Pointer übergeben werden.
Analog zu den Parametern PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green und
PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue muss der Zeiger auf die Prozedur abhängig von der
benutzten Operatorsignatur und der Programmierumgebung übergeben werden.
Achtung
gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Externgen_image3_extern überprüft nicht, ob in PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red,
PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green und PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue genug
Speicher für ein Bild der Größe
WidthWidthWidthWidthwidthwidth * HeightHeightHeightHeightheightheight allokiert wurde.
Ebenso überprüft gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Externgen_image3_extern nicht, ob die Pixel in
PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green und PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue
einen gültigen Wert haben oder nicht.
Es muss also darauf geachtet werden, dass diese Werte gültig sind, da es
sonst zum Programmabsturz kommen kann!
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
ImageImageImageImageimageimage (output_object) image → objectHImageHObjectHImageHobject * (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)
Erzeugtes HALCON-Bild.
TypeTypeTypeTypetypetype (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Pixeltyp.
Defaultwert:
'byte'
"byte"
"byte"
"byte"
"byte"
"byte"
Werteliste: 'byte'"byte""byte""byte""byte""byte", 'cyclic'"cyclic""cyclic""cyclic""cyclic""cyclic", 'direction'"direction""direction""direction""direction""direction", 'int1'"int1""int1""int1""int1""int1", 'int2'"int2""int2""int2""int2""int2", 'int4'"int4""int4""int4""int4""int4", 'real'"real""real""real""real""real", 'uint2'"uint2""uint2""uint2""uint2""uint2"
WidthWidthWidthWidthwidthwidth (input_control) extent.x → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Breite des Bildes.
Defaultwert: 512
Wertevorschläge: 128, 256, 512, 1024
Typischer Wertebereich: 1
≤
Width
Width
Width
Width
width
width
≤
512 (lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 10
Restriktion: Width >= 1
HeightHeightHeightHeightheightheight (input_control) extent.y → HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Höhe des Bildes.
Defaultwert: 512
Wertevorschläge: 128, 256, 512, 1024
Typischer Wertebereich: 1
≤
Height
Height
Height
Height
height
height
≤
512 (lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 10
Restriktion: Height >= 1
PointerRedPointerRedPointerRedPointerRedpointerRedpointer_red (input_control) pointer → HTupleintHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)
Zeiger auf den ersten Grauwert des ersten Kanals.
PointerGreenPointerGreenPointerGreenPointerGreenpointerGreenpointer_green (input_control) pointer → HTupleintHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)
Zeiger auf den ersten Grauwert des zweiten Kanals.
PointerBluePointerBluePointerBluePointerBluepointerBluepointer_blue (input_control) pointer → HTupleintHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)
Zeiger auf den ersten Grauwert des dritten Kanals.
ClearProcClearProcClearProcClearProcclearProcclear_proc (input_control) pointer → HTupleintHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)
Zeiger auf die Prozedur, die den Speicher des Bildes
beim Löschen des Objektes wieder freigibt.
Defaultwert: 0
Beispiel (C)
void NewImage(Hobject *new)
{
unsigned char *image_red;
unsigned char *image_green;
unsigned char *image_blue;
int r,c;
image_red = malloc(640*480);
image_green = malloc(640*480);
image_blue = malloc(640*480);
for (r=0; r<480; r++)
for (c=0; c<640; c++)
{
image_red[r*640+c] = c % 255;
image_green[r*640+c] = (c+64) % 255;
image_blue[r*640+c] = (c+128) % 255;
}
gen_image3_extern(new,"byte",640,480,(Hlong)image_red,\
(Hlong)image_green,(Hlong)image_blue,(Hlong)free);
}
Ergebnis
Sind die Parameterwerte korrekt, dann liefert gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Externgen_image3_extern
den Wert TRUE.
Andernfalls wird eine Fehlerbehandlung durchgeführt.
Alternativen
gen_image3gen_image3GenImage3GenImage3GenImage3gen_image3,
gen_image_constgen_image_constGenImageConstGenImageConstGenImageConstgen_image_const,
get_image_pointer3get_image_pointer3GetImagePointer3GetImagePointer3GetImagePointer3get_image_pointer3,
gen_image1_externgen_image1_externGenImage1ExternGenImage1ExternGenImage1Externgen_image1_extern
Siehe auch
reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain,
paint_graypaint_grayPaintGrayPaintGrayPaintGraypaint_gray,
paint_regionpaint_regionPaintRegionPaintRegionPaintRegionpaint_region,
set_grayvalset_grayvalSetGrayvalSetGrayvalSetGrayvalset_grayval
Modul
Foundation