|
Java example source code file (mlib_ImageAffine_BL_F32.c)
The mlib_ImageAffine_BL_F32.c Java example source code/* * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ /* * FUNCTION * Internal functions for mlib_ImageAffine with bilinear filtering. */ #include "mlib_ImageAffine.h" /***************************************************************/ #define DTYPE mlib_f32 #define FTYPE DTYPE #define FUN_NAME(CHAN) mlib_ImageAffine_f32_##CHAN##_bl /***************************************************************/ mlib_status FUN_NAME(1ch)(mlib_affine_param *param) { DECLAREVAR_BL(); DTYPE *dstLineEnd; FTYPE scale = ONE / MLIB_PREC; mlib_s32 srcYStride1; srcYStride /= sizeof(DTYPE); srcYStride1 = srcYStride + 1; for (j = yStart; j <= yFinish; j++) { FTYPE t, u, k0, k1, k2, k3; FTYPE a00_0, a01_0, a10_0, a11_0; FTYPE pix0; CLIP(1); dstLineEnd = (DTYPE *) dstData + xRight; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + xSrc; k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_0 = srcPixelPtr[0]; a01_0 = srcPixelPtr[1]; a10_0 = srcPixelPtr[srcYStride]; a11_0 = srcPixelPtr[srcYStride1]; for (; dstPixelPtr < dstLineEnd; dstPixelPtr++) { pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = *(DTYPE **) ((mlib_u8 *) lineAddr + ySrc) + xSrc; k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_0 = srcPixelPtr[0]; a01_0 = srcPixelPtr[1]; a10_0 = srcPixelPtr[srcYStride]; a11_0 = srcPixelPtr[srcYStride1]; dstPixelPtr[0] = pix0; } pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; dstPixelPtr[0] = pix0; } return MLIB_SUCCESS; } /***************************************************************/ mlib_status FUN_NAME(2ch)(mlib_affine_param *param) { DECLAREVAR_BL(); DTYPE *dstLineEnd; FTYPE scale = ONE / MLIB_PREC; for (j = yStart; j <= yFinish; j++) { DTYPE *srcPixelPtr2; FTYPE t, u, k0, k1, k2, k3; FTYPE a00_0, a01_0, a10_0, a11_0; FTYPE a00_1, a01_1, a10_1, a11_1; FTYPE pix0, pix1; CLIP(2); dstLineEnd = (DTYPE *) dstData + 2 * xRight; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + 2 * xSrc; srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a01_0 = srcPixelPtr[2]; a01_1 = srcPixelPtr[3]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a11_0 = srcPixelPtr2[2]; a11_1 = srcPixelPtr2[3]; for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 2) { pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + 2 * xSrc; srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a01_0 = srcPixelPtr[2]; a01_1 = srcPixelPtr[3]; a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a11_0 = srcPixelPtr2[2]; a11_1 = srcPixelPtr2[3]; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; } pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; } return MLIB_SUCCESS; } /***************************************************************/ mlib_status FUN_NAME(3ch)(mlib_affine_param *param) { DECLAREVAR_BL(); DTYPE *dstLineEnd; FTYPE scale = ONE / MLIB_PREC; for (j = yStart; j <= yFinish; j++) { DTYPE *srcPixelPtr2; FTYPE t, u, k0, k1, k2, k3; FTYPE a00_0, a01_0, a10_0, a11_0; FTYPE a00_1, a01_1, a10_1, a11_1; FTYPE a00_2, a01_2, a10_2, a11_2; FTYPE pix0, pix1, pix2; CLIP(3); dstLineEnd = (DTYPE *) dstData + 3 * xRight; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + 3 * xSrc; srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a00_2 = srcPixelPtr[2]; a01_0 = srcPixelPtr[3]; a01_1 = srcPixelPtr[4]; a01_2 = srcPixelPtr[5]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a10_2 = srcPixelPtr2[2]; a11_0 = srcPixelPtr2[3]; a11_1 = srcPixelPtr2[4]; a11_2 = srcPixelPtr2[5]; for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 3) { pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; pix2 = k0 * a00_2 + k1 * a01_2 + k2 * a10_2 + k3 * a11_2; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + 3 * xSrc; srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a01_0 = srcPixelPtr[3]; a01_1 = srcPixelPtr[4]; a01_2 = srcPixelPtr[5]; a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a00_2 = srcPixelPtr[2]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a10_2 = srcPixelPtr2[2]; a11_0 = srcPixelPtr2[3]; a11_1 = srcPixelPtr2[4]; a11_2 = srcPixelPtr2[5]; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; dstPixelPtr[2] = pix2; } pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; pix2 = k0 * a00_2 + k1 * a01_2 + k2 * a10_2 + k3 * a11_2; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; dstPixelPtr[2] = pix2; } return MLIB_SUCCESS; } /***************************************************************/ mlib_status FUN_NAME(4ch)(mlib_affine_param *param) { DECLAREVAR_BL(); DTYPE *dstLineEnd; FTYPE scale = ONE / MLIB_PREC; for (j = yStart; j <= yFinish; j++) { DTYPE *srcPixelPtr2; FTYPE t, u, k0, k1, k2, k3; FTYPE a00_0, a01_0, a10_0, a11_0; FTYPE a00_1, a01_1, a10_1, a11_1; FTYPE a00_2, a01_2, a10_2, a11_2; FTYPE a00_3, a01_3, a10_3, a11_3; FTYPE pix0, pix1, pix2, pix3; CLIP(4); dstLineEnd = (DTYPE *) dstData + 4 * xRight; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> MLIB_SHIFT; X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + 4 * xSrc; srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a00_2 = srcPixelPtr[2]; a00_3 = srcPixelPtr[3]; a01_0 = srcPixelPtr[4]; a01_1 = srcPixelPtr[5]; a01_2 = srcPixelPtr[6]; a01_3 = srcPixelPtr[7]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a10_2 = srcPixelPtr2[2]; a10_3 = srcPixelPtr2[3]; a11_0 = srcPixelPtr2[4]; a11_1 = srcPixelPtr2[5]; a11_2 = srcPixelPtr2[6]; a11_3 = srcPixelPtr2[7]; for (; dstPixelPtr < dstLineEnd; dstPixelPtr += 4) { pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; pix2 = k0 * a00_2 + k1 * a01_2 + k2 * a10_2 + k3 * a11_2; pix3 = k0 * a00_3 + k1 * a01_3 + k2 * a10_3 + k3 * a11_3; t = (X & MLIB_MASK) * scale; u = (Y & MLIB_MASK) * scale; ySrc = MLIB_POINTER_SHIFT(Y); Y += dY; xSrc = X >> (MLIB_SHIFT - 2); X += dX; srcPixelPtr = MLIB_POINTER_GET(lineAddr, ySrc) + (xSrc & ~3); srcPixelPtr2 = (DTYPE *) ((mlib_u8 *) srcPixelPtr + srcYStride); k3 = t * u; k2 = (ONE - t) * u; k1 = t * (ONE - u); k0 = (ONE - t) * (ONE - u); a00_3 = srcPixelPtr[3]; a01_3 = srcPixelPtr[7]; a10_3 = srcPixelPtr2[3]; a11_3 = srcPixelPtr2[7]; a00_0 = srcPixelPtr[0]; a00_1 = srcPixelPtr[1]; a00_2 = srcPixelPtr[2]; a01_0 = srcPixelPtr[4]; a01_1 = srcPixelPtr[5]; a01_2 = srcPixelPtr[6]; a10_0 = srcPixelPtr2[0]; a10_1 = srcPixelPtr2[1]; a10_2 = srcPixelPtr2[2]; a11_0 = srcPixelPtr2[4]; a11_1 = srcPixelPtr2[5]; a11_2 = srcPixelPtr2[6]; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; dstPixelPtr[2] = pix2; dstPixelPtr[3] = pix3; } pix0 = k0 * a00_0 + k1 * a01_0 + k2 * a10_0 + k3 * a11_0; pix1 = k0 * a00_1 + k1 * a01_1 + k2 * a10_1 + k3 * a11_1; pix2 = k0 * a00_2 + k1 * a01_2 + k2 * a10_2 + k3 * a11_2; pix3 = k0 * a00_3 + k1 * a01_3 + k2 * a10_3 + k3 * a11_3; dstPixelPtr[0] = pix0; dstPixelPtr[1] = pix1; dstPixelPtr[2] = pix2; dstPixelPtr[3] = pix3; } return MLIB_SUCCESS; } /***************************************************************/ Other Java examples (source code examples)Here is a short list of links related to this Java mlib_ImageAffine_BL_F32.c source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.