bdsup2sub.bitmap.Palette Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2014 Volker Oth (0xdeadbeef) / Miklos Juhasz (mjuhasz)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package bdsup2sub.bitmap;
import java.awt.*;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
import java.util.Arrays;
import static bdsup2sub.bitmap.ColorSpaceUtils.RGB2YCbCr;
/**
* Palette class for mixed representation of RGB/YCbCr palettes with alpha information.
*/
public class Palette {
/** Number of palette entries */
private final int size;
/** Byte buffer for RED info */
private final byte[] r;
/** Byte buffer for GREEN info */
private final byte[] g;
/** Byte buffer for BLUE info */
private final byte[] b;
/** Byte buffer for alpha info */
private final byte[] a;
/** Byte buffer for Y (luminance) info */
private final byte[] y;
/** Byte buffer for Cb (chrominance blue) info */
private final byte[] cb;
/** Byte buffer for Cr (chrominance red) info */
private final byte[] cr;
/** Use BT.601 color model instead of BT.709 */
private final boolean useBT601;
/**
* Initializes palette with transparent black (RGBA: 0x00000000)
* @param size Number of palette entries
*/
public Palette(int size, boolean useBT601) {
this.size = size;
this.useBT601 = useBT601;
r = new byte[size];
g = new byte[size];
b = new byte[size];
a = new byte[size];
y = new byte[size];
cb = new byte[size];
cr = new byte[size];
// set at least all alpha values to invisible
int[] yCbCr = RGB2YCbCr(0, 0, 0, useBT601);
for (int i=0; i < size; i++) {
a[i] = 0;
r[i] = 0;
g[i] = 0;
b[i] = 0;
y[i] = (byte)yCbCr[0];
cb[i] = (byte)yCbCr[1];
cr[i] = (byte)yCbCr[2];
}
}
/**
* Initializes a palette with transparent black (RGBA: 0x00000000)
*/
public Palette(int size) {
this(size, false);
}
public Palette(byte[] red, byte[] green, byte[] blue, byte[] alpha, boolean useBT601) {
size = red.length;
this.useBT601 = useBT601;
r = new byte[size];
g = new byte[size];
b = new byte[size];
a = new byte[size];
y = new byte[size];
cb = new byte[size];
cr = new byte[size];
int yCbCr[];
for (int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy