晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /usr/include/OpenEXR/ |
Upload File : |
#ifndef INCLUDED_IMF_RGBA_YCA_H
#define INCLUDED_IMF_RGBA_YCA_H
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2004, Industrial Light & Magic, a division of Lucasfilm
// Entertainment Company Ltd. Portions contributed and copyright held by
// others as indicated. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above
// copyright notice, this list of conditions and the following
// disclaimer.
//
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided with
// the distribution.
//
// * Neither the name of Industrial Light & Magic nor the names of
// any other contributors to this software may be used to endorse or
// promote products derived from this software without specific prior
// written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------
//
// Conversion between RGBA (red, green, blue alpha)
// and YCA (luminance, subsampled chroma, alpha) data:
//
// Luminance, Y, is computed as a weighted sum of R, G, and B:
//
// Y = yw.x * R + yw.y * G + yw.z * B
//
// Function computeYw() computes a set of RGB-to-Y weights, yw,
// from a set of primary and white point chromaticities.
//
// Chroma, C, consists of two components, RY and BY:
//
// RY = (R - Y) / Y
// BY = (B - Y) / Y
//
// For efficiency, the x and y subsampling rates for chroma are
// hardwired to 2, and the chroma subsampling and reconstruction
// filters are fixed 27-pixel wide windowed sinc functions.
//
// Starting with an image that has RGBA data for all pixels,
//
// RGBA RGBA RGBA RGBA ... RGBA RGBA
// RGBA RGBA RGBA RGBA ... RGBA RGBA
// RGBA RGBA RGBA RGBA ... RGBA RGBA
// RGBA RGBA RGBA RGBA ... RGBA RGBA
// ...
// RGBA RGBA RGBA RGBA ... RGBA RGBA
// RGBA RGBA RGBA RGBA ... RGBA RGBA
//
// function RGBAtoYCA() converts the pixels to YCA format:
//
// YCA YCA YCA YCA ... YCA YCA
// YCA YCA YCA YCA ... YCA YCA
// YCA YCA YCA YCA ... YCA YCA
// YCA YCA YCA YCA ... YCA YCA
// ...
// YCA YCA YCA YCA ... YCA YCA
// YCA YCA YCA YCA ... YCA YCA
//
// Next, decimateChomaHoriz() eliminates the chroma values from
// the odd-numbered pixels in every scan line:
//
// YCA YA YCA YA ... YCA YA
// YCA YA YCA YA ... YCA YA
// YCA YA YCA YA ... YCA YA
// YCA YA YCA YA ... YCA YA
// ...
// YCA YA YCA YA ... YCA YA
// YCA YA YCA YA ... YCA YA
//
// decimateChromaVert() eliminates all chroma values from the
// odd-numbered scan lines:
//
// YCA YA YCA YA ... YCA YA
// YA YA YA YA ... YA YA
// YCA YA YCA YA ... YCA YA
// YA YA YA YA ... YA YA
// ...
// YCA YA YCA YA ... YCA YA
// YA YA YA YA ... YA YA
//
// Finally, roundYCA() reduces the precision of the luminance
// and chroma values so that the pixel data shrink more when
// they are saved in a compressed file.
//
// The output of roundYCA() can be converted back to a set
// of RGBA pixel data that is visually very similar to the
// original RGBA image, by calling reconstructChromaHoriz(),
// reconstructChromaVert(), YCAtoRGBA(), and finally
// fixSaturation().
//
//-----------------------------------------------------------------------------
#include "ImfRgba.h"
#include "ImfChromaticities.h"
#include "ImfNamespace.h"
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
namespace RgbaYca {
//
// Width of the chroma subsampling and reconstruction filters
//
static const int N = 27;
static const int N2 = N / 2;
//
// Convert a set of primary chromaticities into a set of weighting
// factors for computing a pixels's luminance, Y, from R, G and B
//
IMF_EXPORT
IMATH_NAMESPACE::V3f computeYw (const Chromaticities &cr);
//
// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha):
//
// ycaOut[i].g = Y (rgbaIn[i]);
// ycaOut[i].r = RY (rgbaIn[i]);
// ycaOut[i].b = BY (rgbaIn[i]);
// ycaOut[i].a = aIsValid? rgbaIn[i].a: 1
//
// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
//
IMF_EXPORT
void RGBAtoYCA (const IMATH_NAMESPACE::V3f &yw,
int n,
bool aIsValid,
const Rgba rgbaIn[/*n*/],
Rgba ycaOut[/*n*/]);
//
// Perform horizontal low-pass filtering and subsampling of
// the chroma channels of an array of n pixels. In order
// to avoid indexing off the ends of the input array during
// low-pass filtering, ycaIn must have N2 extra pixels at
// both ends. Before calling decimateChromaHoriz(), the extra
// pixels should be filled with copies of the first and last
// "real" input pixel.
//
IMF_EXPORT
void decimateChromaHoriz (int n,
const Rgba ycaIn[/*n+N-1*/],
Rgba ycaOut[/*n*/]);
//
// Perform vertical chroma channel low-pass filtering and subsampling.
// N scan lines of input pixels are combined into a single scan line
// of output pixels.
//
IMF_EXPORT
void decimateChromaVert (int n,
const Rgba * const ycaIn[N],
Rgba ycaOut[/*n*/]);
//
// Round the luminance and chroma channels of an array of YCA
// pixels that has already been filtered and subsampled.
// The signifcands of the pixels' luminance and chroma values
// are rounded to roundY and roundC bits respectively.
//
IMF_EXPORT
void roundYCA (int n,
unsigned int roundY,
unsigned int roundC,
const Rgba ycaIn[/*n*/],
Rgba ycaOut[/*n*/]);
//
// For a scan line that has valid chroma data only for every other pixel,
// reconstruct the missing chroma values.
//
IMF_EXPORT
void reconstructChromaHoriz (int n,
const Rgba ycaIn[/*n+N-1*/],
Rgba ycaOut[/*n*/]);
//
// For a scan line that has only luminance and no valid chroma data,
// reconstruct chroma from the surronding N scan lines.
//
IMF_EXPORT
void reconstructChromaVert (int n,
const Rgba * const ycaIn[N],
Rgba ycaOut[/*n*/]);
//
// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA.
// This function is the inverse of RGBAtoYCA().
// yw is a set of RGB-to-Y weighting factors, as computed by computeYw().
//
IMF_EXPORT
void YCAtoRGBA (const IMATH_NAMESPACE::V3f &yw,
int n,
const Rgba ycaIn[/*n*/],
Rgba rgbaOut[/*n*/]);
//
// Eliminate super-saturated pixels:
//
// Converting an image from RGBA to YCA, low-pass filtering chroma,
// and converting the result back to RGBA can produce pixels with
// super-saturated colors, where one or two of the RGB components
// become zero or negative. (The low-pass and reconstruction filters
// introduce some amount of ringing into the chroma components.
// This can lead to negative RGB values near high-contrast edges.)
//
// The fixSaturation() function finds super-saturated pixels and
// corrects them by desaturating their colors while maintaining
// their luminance. fixSaturation() takes three adjacent input
// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the
// saturation of rgbaIn[1], and stores the result in rgbaOut.
//
IMF_EXPORT
void fixSaturation (const IMATH_NAMESPACE::V3f &yw,
int n,
const Rgba * const rgbaIn[3],
Rgba rgbaOut[/*n*/]);
} // namespace RgbaYca
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
#endif