| /******************************************************************************* |
| * Copyright (c) 2003, 2008 IBM Corporation and Others |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Junji MAEDA - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.actf.visualization.engines.lowvision.color; |
| |
| /* |
| * NTSC YIQ [0.0, 1.0] (float) |
| */ |
| public class ColorYIQ { |
| private float Y; |
| |
| private float I; |
| |
| private float Q; |
| |
| public ColorYIQ(ColorSRGB _srgb) throws ColorException { |
| this(_srgb, false); |
| } |
| |
| public ColorYIQ(ColorSRGB _srgb, boolean _check) throws ColorException { |
| float r = _srgb.getR(); |
| float g = _srgb.getG(); |
| float b = _srgb.getB(); |
| Y = 0.299f * r + 0.587f * g + 0.114f * b; |
| I = 0.596f * r - 0.274f * g - 0.322f * b; |
| Q = 0.211f * r - 0.522f * g + 0.311f * b; |
| |
| if (_check) { |
| rangeCheck(); |
| } else { |
| rangeAdjust(); |
| } |
| } |
| |
| private void rangeCheck() throws ColorException { |
| if (Y < 0.0f || 1.0f < Y) { |
| throw new ColorException("Y is out of range: " + Y); |
| } |
| if (I < 0.0f || 1.0f < I) { |
| throw new ColorException("I is out of range: " + I); |
| } |
| if (Q < 0.0f || 1.0f < Q) { |
| throw new ColorException("Q is out of range: " + Q); |
| } |
| } |
| |
| private void rangeAdjust() { |
| if (Y < 0.0f) |
| Y = 0.0f; |
| else if (Y > 1.0f) |
| Y = 1.0f; |
| if (I < 0.0f) |
| I = 0.0f; |
| else if (I > 1.0f) |
| I = 1.0f; |
| if (Q < 0.0f) |
| Q = 0.0f; |
| else if (Q > 1.0f) |
| Q = 1.0f; |
| } |
| |
| public float getY() { |
| return (Y); |
| } |
| |
| public float getI() { |
| return (I); |
| } |
| |
| public float getQ() { |
| return (Q); |
| } |
| |
| public void setY(float _y) { |
| Y = _y; |
| } |
| |
| public void seti(float _i) { |
| I = _i; |
| } |
| |
| public void setQ(float _q) { |
| Q = _q; |
| } |
| |
| public ColorSRGB toSRGB() throws ColorException { |
| float r = 1.0f * Y + 0.955653f * I + 0.622895f * Q; |
| float g = 1.0f * Y - 0.27215f * I - 0.64834f * Q; |
| float b = 1.0f * Y - 1.10516f * I + 1.704625f * Q; |
| return (new ColorSRGB(r, g, b, false)); |
| } |
| } |