[IDL en C] wijzigen IDL array in C?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • prometheus345479
  • Registratie: Mei 2005
  • Laatst online: 12-10-2022
Hoi,

ik heb een tijdje geleden al eerder iets gepost over IDL en C. (deze IDL).

Ik probeer een camera aan te sturen via IDL. Ik ben nu zover dat ik alles in C in orde heb. Ik krijg alleen het array niet goed terug gestuurd naar IDL.

Als ik in C een toepassing maak, en die de output van de camera in een textbestand laat zetten, en vervolgens het textbestand in IDL inlees en plot, dan gaat alles goed, en krijg ik het plaatje goed in beeld.

Maar, als ik in IDL een array aanmaak, die doorgeef naar C en in C het plaatje naar het array wegschrijf, dan krijg ik een vervormd plaatje terug. (dimensies kloppen, maar plaatje is langerekt, en het lijkt alsof C niet precies op de goede pointeradressen wegschrijft)

Dit is de code die ik gebruik om de camera aan te roepen in IDL:

[code=IDL]
image=lonarr(param.width,param.height)
returnvalue = CALL_EXTERNAL(lib, 'take_image', param, image, /CDECL, /AUTO_GLUE)
[/code=IDL]

param is een structure met instellingen voor de camera.

Vervolgens in de C code:

[code=C]
int take_image(param* settings, IDL_LONG* p_idl_image) {
short x,y,err;
unsigned short* row;

blablabla bereid camera voor e.d.

row = (unsigned short*) malloc(settings->width*sizeof(unsigned short));
if (row == NULL) return 101;

for(y=0; y<settings->height; y++){

err = SBIGUnivDrvCommand(CC_READOUT_LINE, &rlp, row);
if(err != CE_NO_ERROR) return err;

for (x=0; x<settings->width; x++) {
p_idl_image[x+y*settings->width] = (IDL_LONG) *(row+x);
}
}

free( row );

[/code=C]
err = SBIGUnivDrvCommand(CC_READOUT_LINE, &rlp, row); leest een rij pixels uit de camera uit, en zet die weg op het adres van row.

En vervolgens schrijf ik de rij weg op de het adres van de het IDL array.

Als ik direct de waarden van "*(row+x)" wegschrijf, en weer inlees in IDL dan gaat het prima.

Als ik de waarden van "p_idl_image[x+y*settings->width]" wegschrijf, en terug inlees in IDL, gaat het ook goed.

Maar als ik direct na call_external image probeer te plotten krijg ik dus een vervormd plaatje.

Ik ben hier nu al 2 dagen mee bezig 8)7

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11:51
Zet eens een breakpoint op de plek waar je iets in het array schrijft en bekijk het verschil met wat het moet zijn ( bijvoorbeeld met wat je zou inlezen van je bestand )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.