bool CDocCommands::FlipRotateTabSubCommand(CString& strCommand) { if (strCommand == "FLIPHORIZONTAL") return FlipXY(true, false); else if (strCommand == "FLIPVERTICAL") return FlipXY(false, true); return false; }
bool HdrImage::Load(const char* fn) { mFlipX = false; mFlipY = false; FILE* fp = fopen(fn, "rb"); if (!fp) { setSize(16, 16); Clear(); return false; } char buf[128]; fgets(buf, sizeof(buf), fp); if (strcmp(buf, "#?RADIANCE\n") != 0) { fclose(fp); setSize(16, 16); Clear(); return false; } while (!feof(fp)) { fgets(buf, sizeof(buf), fp); if (strcmp(buf, "\n") == 0) { break; } if (buf[0] != '#') { if (char* nameEnd = strchr(buf, '=')) { *nameEnd++ = '\0'; size_t valLen = strlen(nameEnd); if (nameEnd[valLen-1] == '\n') { nameEnd[valLen-1] = '\0'; } setProperty(buf, strdup(nameEnd)); } } } char flip[2]; char dim[2]; int size[2]; fgets(buf, sizeof(buf), fp); sscanf(buf, "%c%c %d %c%c %d", &flip[0], &dim[0], &size[0], &flip[1], &dim[1], &size[1]); int width = 0; int height = 0; bool flipX = false; bool flipY = false; for (int i = 0; i < 2; i++) { switch(dim[i]) { case 'X': case 'x': width = size[i]; flipX = (flip[i]=='-'); break; case 'Y': case 'y': height = size[i]; flipY = (flip[i]=='-'); break; } } if (width <= 0 || height <= 0) { fclose(fp); setSize(16, 16); Clear(); return false; } else { setSize(width, height); const bool result = ReadDataRLE(fp, (float*)mData, mWidth, mHeight); fclose(fp); if (result) { if (flipX && flipY) { FlipXY(); } else if (flipY) { FlipY(); } else if (flipX) { FlipX(); } } return result; } }