Exemplo n.º 1
0
bool CDocCommands::FlipRotateTabSubCommand(CString& strCommand)
{
	if (strCommand == "FLIPHORIZONTAL")
		return FlipXY(true, false);
	else if (strCommand == "FLIPVERTICAL")
		return FlipXY(false, true);

	return false;
}
Exemplo n.º 2
0
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;
	}
}