/* gltxReadRGB: Reads and returns data from an IRIS RGB image file. * * filename - name of the IRIS RGB file to read data from */ GLTXimage* gltxReadRGB(char *filename) { rawImageRec *raw; GLTXimage* image; raw = RawImageOpen(filename); if(!raw) { fprintf(stderr, "gltxReadRGB() failed: can't open image file \"%s\".\n", filename); return NULL; } image = (GLTXimage*)malloc(sizeof(GLTXimage)); if (image == NULL) { fprintf(stderr, "gltxReadRGB() failed: insufficient memory.\n"); return NULL; } image->width = raw->sizeX; image->height = raw->sizeY; image->components = raw->sizeZ; RawImageGetData(raw, image); RawImageClose(raw); return image; }
static rawImageRec *RawImageOpenAW(char *fileName, BOOL bUnicode) { rawImageRec *raw; unsigned long *rowStart, *rowSize, ulTmp; int x; DWORD dwBytesRead; raw = (rawImageRec *)malloc(sizeof(rawImageRec)); if (raw == NULL) { MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK); return NULL; } raw->file = bUnicode ? CreateFileW((LPWSTR) fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0) : CreateFileA((LPSTR) fileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0); if (raw->file == INVALID_HANDLE_VALUE) { char ach[256]; bUnicode ? wsprintf(ach, "Failed to open image file %ws.\n", fileName) : wsprintf(ach, "Failed to open image file %s.\n", fileName); MESSAGEBOX(GetFocus(), ach, "Error", MB_OK); free( raw ); return NULL; } ReadFile(raw->file, (LPVOID) raw, 12, &dwBytesRead, (LPOVERLAPPED) NULL); if (raw->imagic == IMAGIC_SWAP) { raw->type = SWAP_SHORT_BYTES(raw->type); raw->dim = SWAP_SHORT_BYTES(raw->dim); raw->sizeX = SWAP_SHORT_BYTES(raw->sizeX); raw->sizeY = SWAP_SHORT_BYTES(raw->sizeY); raw->sizeZ = SWAP_SHORT_BYTES(raw->sizeZ); } else if (raw->imagic != IMAGIC) { // magic number is absent - conclude file is invalid (?) MESSAGEBOX(GetFocus(), "Invalid rgb file.", "Error", MB_OK); RawImageClose( raw ); return NULL; } raw->tmp = (unsigned char *)malloc(raw->sizeX*256); raw->tmpR = (unsigned char *)malloc(raw->sizeX*256); raw->tmpG = (unsigned char *)malloc(raw->sizeX*256); raw->tmpB = (unsigned char *)malloc(raw->sizeX*256); if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL || raw->tmpB == NULL) { MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK); RawImageClose( raw ); return NULL; } if ((raw->type & 0xFF00) == 0x0100) { x = raw->sizeY * raw->sizeZ * sizeof(long); raw->rowStart = (unsigned long *)malloc(x); raw->rowSize = (long *)malloc(x); if (raw->rowStart == NULL || raw->rowSize == NULL) { MESSAGEBOX(GetFocus(), "Out of memory.", "Error", MB_OK); RawImageClose( raw ); return NULL; } raw->rleEnd = 512 + (2 * x); SetFilePointer(raw->file, 512, NULL, FILE_BEGIN); ReadFile(raw->file, (LPVOID) raw->rowStart, x, &dwBytesRead, (LPOVERLAPPED) NULL); ReadFile(raw->file, (LPVOID) raw->rowSize, x, &dwBytesRead, (LPOVERLAPPED) NULL); if (raw->imagic == IMAGIC_SWAP) { x /= sizeof(long); rowStart = raw->rowStart; rowSize = raw->rowSize; while (x--) { ulTmp = *rowStart; *rowStart++ = SWAP_LONG_BYTES(ulTmp); ulTmp = *rowSize; *rowSize++ = SWAP_LONG_BYTES(ulTmp); } } } return raw; }
static rawImageRec *RawImageOpen(char *fileName) { union { int testWord; char testByte[4]; } endianTest; rawImageRec *raw; int swapFlag; int x; endianTest.testWord = 1; if (endianTest.testByte[0] == 1) { swapFlag = 1; } else { swapFlag = 0; } /* 23Oct06 Phil McDonald */ raw = (rawImageRec *) TMP_CALLOC (1, sizeof (rawImageRec)); /* end PM */ if (raw == NULL) { fprintf(stderr, "Out of memory!\n"); return NULL; } if ((raw->file = fopen(fileName, "rb")) == NULL) { perror(fileName); return NULL; } fread(raw, 1, 12, raw->file); if (swapFlag) { ConvertShort(&raw->imagic, 6); } /* 23Oct06 Phil McDonald */ raw->tmp = (unsigned char *) TMP_MALLOC (raw->sizeX*256); raw->tmpR = (unsigned char *) TMP_MALLOC (raw->sizeX*256); raw->tmpG = (unsigned char *) TMP_MALLOC (raw->sizeX*256); raw->tmpB = (unsigned char *) TMP_MALLOC (raw->sizeX*256); if (raw->tmp == NULL || raw->tmpR == NULL || raw->tmpG == NULL || raw->tmpB == NULL) { fprintf(stderr, "Out of memory!\n"); RawImageClose (raw); /* end PM */ return NULL; } if ((raw->type & 0xFF00) == 0x0100) { x = raw->sizeY * raw->sizeZ * sizeof(unsigned int); /* 23Oct06 Phil McDonald */ raw->rowStart = (unsigned int *) TMP_MALLOC (x); raw->rowSize = (int *) TMP_MALLOC (x); if (raw->rowStart == NULL || raw->rowSize == NULL) { fprintf(stderr, "Out of memory!\n"); RawImageClose (raw); /* end PM */ return NULL; } raw->rleEnd = 512 + (2 * x); fseek(raw->file, 512, SEEK_SET); fread(raw->rowStart, 1, x, raw->file); fread(raw->rowSize, 1, x, raw->file); if (swapFlag) { ConvertLong(raw->rowStart, x/sizeof(unsigned int)); ConvertLong((unsigned int *)raw->rowSize, x/sizeof(int)); } } return raw; }