gen_image3_externgen_image3_externGenImage3ExternGenImage3Extern (Operator)

Name

gen_image3_externgen_image3_externGenImage3ExternGenImage3Extern — Erzeugen eines dreikanaligen Bildes aus drei Zeigern auf Pixel (mit Speicherverwaltung).

Signatur

gen_image3_extern( : Image : Type, Width, Height, PointerRed, PointerGreen, PointerBlue, ClearProc : )

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_externGenImage3ExternGenImage3ExternGenImage3Extern erzeugt ein Dreikanalbild in der Größe WidthWidthWidthWidthwidth * HeightHeightHeightHeightheight. Die Pixel in PointerRedPointerRedPointerRedPointerRedpointerRed, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen und PointerBluePointerBluePointerBluePointerBluepointerBlue sind zeilensequentiell abgelegt. Der Typ der übergebenen Pixel muss mit TypeTypeTypeTypetype übereinstimmen (siehe gen_image_constgen_image_constGenImageConstGenImageConstGenImageConst 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_image3GenImage3GenImage3GenImage3 nicht neu angelegt und damit auch nicht kopiert. Der Speicherplatz auf den (PointerRedPointerRedPointerRedPointerRedpointerRed, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen, PointerBluePointerBluePointerBluePointerBluepointerBlue) zeigt, muss also beim Löschen des Objektes ImageImageImageImageimage freigegeben werden. Dies geschieht durch die, vom Aufrufer zur Verfügung gestellte, Prozedur ClearProcClearProcClearProcClearProcclearProc. Diese Prozedur muss folgende Signatur haben

void ClearProc(void* ptr);

und wird beim Löschen von ImageImageImageImageimage 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 PointerRedPointerRedPointerRedPointerRedpointerRed, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen und PointerBluePointerBluePointerBluePointerBluepointerBlue muss der Zeiger auf die Prozedur abhängig von der benutzten Operatorsignatur und der Programmierumgebung übergeben werden.

Achtung

gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Extern überprüft nicht, ob in PointerRedPointerRedPointerRedPointerRedpointerRed, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen und PointerBluePointerBluePointerBluePointerBluepointerBlue genug Speicher für ein Bild der Größe WidthWidthWidthWidthwidth * HeightHeightHeightHeightheight allokiert wurde.

Ebens überprüft gen_image3_externgen_image3_externGenImage3ExternGenImage3ExternGenImage3Extern nicht, ob die Pixel in PointerRedPointerRedPointerRedPointerRedpointerRed, PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen und PointerBluePointerBluePointerBluePointerBluepointerBlue 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

Parameter

ImageImageImageImageimage (output_object)  image objectHImageHImageHobject * (byte / direction / cyclic / int1 / int2 / uint2 / int4 / real)

Erzeugtes HALCON-Bild.

TypeTypeTypeTypetype (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Pixeltyp.

Defaultwert: 'byte' "byte" "byte" "byte" "byte"

Werteliste: 'byte'"byte""byte""byte""byte", '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", 'real'"real""real""real""real", 'uint2'"uint2""uint2""uint2""uint2"

WidthWidthWidthWidthwidth (input_control)  extent.x HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite des Bildes.

Defaultwert: 512

Wertevorschläge: 128, 256, 512, 1024

Typischer Wertebereich: 1 ≤ Width Width Width Width width ≤ 512 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

Restriktion: Width >= 1

HeightHeightHeightHeightheight (input_control)  extent.y HTupleHTupleHtuple (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 ≤ 512 (lin)

Minimale Schrittweite: 1

Empfohlene Schrittweite: 10

Restriktion: Height >= 1

PointerRedPointerRedPointerRedPointerRedpointerRed (input_control)  pointer HTupleHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)

Zeiger auf den ersten Grauwert des ersten Kanals.

PointerGreenPointerGreenPointerGreenPointerGreenpointerGreen (input_control)  pointer HTupleHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)

Zeiger auf den ersten Grauwert des zweiten Kanals.

PointerBluePointerBluePointerBluePointerBluepointerBlue (input_control)  pointer HTupleHTupleHtuple (integer) (IntPtr) (Hlong) (Hlong)

Zeiger auf den ersten Grauwert des dritten Kanals.

ClearProcClearProcClearProcClearProcclearProc (input_control)  pointer HTupleHTupleHtuple (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_externGenImage3ExternGenImage3ExternGenImage3Extern den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.

Alternativen

gen_image3gen_image3GenImage3GenImage3GenImage3, gen_image_constgen_image_constGenImageConstGenImageConstGenImageConst, get_image_pointer3get_image_pointer3GetImagePointer3GetImagePointer3GetImagePointer3, gen_image1_externgen_image1_externGenImage1ExternGenImage1ExternGenImage1Extern

Siehe auch

reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, paint_graypaint_grayPaintGrayPaintGrayPaintGray, paint_regionpaint_regionPaintRegionPaintRegionPaintRegion, set_grayvalset_grayvalSetGrayvalSetGrayvalSetGrayval

Modul

Foundation