INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Thema geschlossen 

"Datenring" in dll verarbeiten



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.12.2009, 14:28
Beitrag #1

grey Offline
LVF-Grünschnabel
*


Beiträge: 37
Registriert seit: Feb 2007

2010
2006
kA

56
Deutschland
"Datenring" in dll verarbeiten
Hallo,

ich versuche gerade eine .dll zu schreiben die dynamisch ein 2D Array aufsummieren soll, also sozusagen eine "moving" Summenbildung durchführt.
Bei der Rechnung stellte ich mir an sich vor, eine Art Ring anzulegen und am Ende jeweils immer nur das neue Bild aufzuaddieren und das, welches am Anfang des Ringes stand zu subtrahieren.

Gerade habe ich jedoch den Eindruck, dass das Programm nur jeweis ein Bild mehrfach aufsummiert und dann gleiches mit dem Nächsten macht. Also P1+P1+P1...+P1 rechnet, statt P1+P2+P3+...Pn.
Das würde darauf schließen lassen, dass die .dll immer wieder von neuem aufgerufen wird und man somit nur jeweils Berechnungen an einem Bild mit einer .dll durchführen könnte. Das das aber wenig schön ist und sicherlich auch komplexere Dinge gehen müssen, würde ich gerne wissen wie ich das vorliegende Problem lösen kann?

Unten angefügt ist der entsprechende C code für die .dll.



<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>/* Call Library source file */

#include "extcode.h"
#include <stdio.h>
#include <stdlib.h>

/* Typedefs */

typedef struct {
int32_t dimSizes[2];
uint8_t elt[1];
} TD1;
typedef TD1 **TD1Hdl;

typedef struct {
int32_t dimSizes[2];
uint32_t elt[1];
} TD2;
typedef TD2 **TD2Hdl;


//Definitios of the Subprograms
int* callocvector(int);
int* freevector(int*);


__declspec(dllexport) int32_t MovingSum(TD1Hdl NewPicture, TD2Hdl SumPic, int32_t *AverageLength);

int32_t MovingSum(TD1Hdl NewPicture, TD2Hdl SumPic, int32_t *AverageLength)
{
int i, k, numrow, numcol, *PicArray, L, picLength, AvPicNum;

numrow=(*NewPicture)->dimSizes[0];
numcol=(*NewPicture)->dimSizes[1];

picLength=numrow*numcol;
L=picLength* *AverageLength;
PicArray= callocvector(L);


for ( k=0;k<*AverageLength;k++)
{
AvPicNum=k*picLength;
for ( i=0;i<picLength;i++)
{
(*SumPic)->elt[i]=(*SumPic)->elt[i]+(*NewPicture)->elt[i]-PicArray[AvPicNum+i];
PicArray[AvPicNum+i]=(*NewPicture)->elt[i]+1;
}
}

PicArray=freevector(PicArray);

return 0;
}


//Unterprogramme zur dynamischen Speicherallokation

/*--------------------------------------------
"callocvector" allocates the memory for a
dynamic vector of length n and initializes it
--------------------------------------------*/

int* callocvector(int n)
{
int j;
int* vector = calloc(n,sizeof(int));

for (j=0; j<n; j++)
{
vector[j] = 0;
}
return(vector);
}


/*--------------------------------------------
"freevector" dis-allocates the memory of
a dynamic vector of arbitrary length and
sets the pointer to NULL
--------------------------------------------*/

int* freevector(int* vector)
{
free(vector);
return(NULL);
}</div>
Alle Beiträge dieses Benutzers finden
to top
Anzeige
Thema geschlossen 


Nachrichten in diesem Thema
"Datenring" in dll verarbeiten - grey - 07.12.2009 14:28
"Datenring" in dll verarbeiten - rolfk - 07.12.2009, 15:18
"Datenring" in dll verarbeiten - grey - 07.12.2009, 15:47
"Datenring" in dll verarbeiten - rolfk - 07.12.2009, 16:09
"Datenring" in dll verarbeiten - grey - 07.12.2009, 22:36
"Datenring" in dll verarbeiten - rolfk - 08.12.2009, 07:58
"Datenring" in dll verarbeiten - grey - 08.12.2009, 08:06

Gehe zu: