blob: 039e8e75273df091daca74f2aef3dca331445f55 [file] [log] [blame]
import '../../image_exception.dart';
import '../../hdr/hdr_image.dart';
import '../../util/input_buffer.dart';
class ExrChannel {
static const int TYPE_UINT = HdrImage.UINT;
static const int TYPE_HALF = HdrImage.HALF;
static const int TYPE_FLOAT = HdrImage.FLOAT;
// Channel Names
/// Luminance
static const String Y = 'Y';
/// Chroma RY
static const String RY = 'RY';
/// Chroma BY
static const String BY = 'BY';
/// Red for colored mattes
static const String AR = 'AR';
/// Green for colored mattes
static const String AG = 'AG';
/// Blue for colored mattes
static const String AB = 'AB';
/// Distance of the front of a sample from the viewer
static const String Z = 'Z';
/// Distance of the back of a sample from the viewer
static const String ZBack = 'ZBack';
/// Alpha/opacity
static const String A = 'A';
/// Red value of a sample
static const String R = 'R';
/// Green value of a sample
static const String G = 'G';
/// Blue value of a sample
static const String B = 'B';
/// A numerical identifier for the object represented by a sample.
static const String ID = 'id';
String name;
int type;
int size;
bool pLinear;
int xSampling;
int ySampling;
ExrChannel(InputBuffer input) {
name = input.readString();
if (name == null || name.isEmpty) {
name = null;
return;
}
type = input.readUint32();
int i = input.readByte();
assert(i == 0 || i == 1);
pLinear = i == 1;
input.skip(3);
xSampling = input.readUint32();
ySampling = input.readUint32();
switch (type) {
case TYPE_UINT:
size = 4;
break;
case TYPE_HALF:
size = 2;
break;
case TYPE_FLOAT:
size = 4;
break;
default:
throw new ImageException('EXR Invalid pixel type: $type');
}
}
bool get isValid => name != null;
}