Salve ragazzi, ho bisogno di qualche dritta per risolvere un problema. Per uno studio sul differenziamento di una popolazione di globuli bianchi devo rappresentare i dati di conta cellulare su uno scattergram come questo:
I dati di partenza sono salvati dallo strumento in un file contenente due matrici compresse che rappresentano l'immagine (allegato matrix.txt).
Le regole per scompattare le matrici sono riassunte nell'allegato 2.
Il manuale propone questa funzione per decomprimere le matrici:
//Matrix uncompressing function example (C Language):
int UnSqueezeMatrix(unsigned char *pucDestMatrix, unsigned char *pucSrcM) // dest, src
{
int iCnt;
unsigned char *pucDest, *pucSrc, ucVal;
pucSrc = pucSrcM; // source
pucDest = pucDestMatrix; // dest
memset(pucDestMatrix, 0, sizeof(BMP_MATRIX)); // maz dest
while (*pucSrc != 'T') // end of trame
{
ucVal = *pucSrc;
switch(ucVal)
{
case '\x0d': // ignore CR , LF , separator
case '\x0a':
case ';':
break;
case 'U': // value 0xFF
{
pucSrc++;
sscanf((char *)pucSrc,"%x", &iCnt);
memset(pucDest, 0xFF, iCnt);
pucDest+= iCnt;
break;
}
case 'Z': // value 0
{
pucSrc++;
sscanf((char *)pucSrc,"%x", &iCnt);
memset(pucDest, 0x00, iCnt);
pucDest+= iCnt;
break;
}
default:
{
sscanf((char *)pucSrc,"%x", &iCnt);
*pucDest++ = (u_char)iCnt;
break;
}
}
while (*pucSrc != ';') // skip ; separator
pucSrc++;
pucSrc++;
}
return((int)pucDest - (int)pucDestMatrix);
}
e questa funzione per rappresentarle (considerata una bitmap bianca con origine al punto 0,0)
static u_char ucMask[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
UnSqueezeMatrix( pucMat, bufferM1); // dest, src uncompress
UnSqueezeMatrix( pucMatL, bufferM2); // dest, src uncompress
for (i = 0; i <(16*128); i++) // 128 x 128 pixels
{
ucVal = *(pucMat+i); // LMNE MATRIX byte
ucValL = *(pucMatL+i); // LMNE SHADE MATRIX byte
iX = (i%16)*8;
iY = i/16;
for (k=0; k<8; k++) // MSB to LSB
{
if ((ucMask[k] & ucValL) != 0) // low level
img->Canvas->Pixels[iX+k] [iY] = ColorLow;
else if ((ucMask[k] & ucVal) != 0) // high level
img->Canvas->Pixels[ iX+k] [iY] = ColorHigh;
}
}
Non sono ferrato con il C ed ho qualche difficoltà ad assemblare le funzioni insieme correttamente.
Secondo voi come posso risolvere il problema?
Grazie anticipatamente.
rosario
Allegati: