mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-04 12:05:29 -04:00
Finally implemented 1-bit subsampling.
This commit is contained in:
parent
ae0250d0b0
commit
a8a48473ff
@ -279,10 +279,8 @@ public class PSDImageReader extends ImageReaderBase {
|
|||||||
|
|
||||||
switch (compression) {
|
switch (compression) {
|
||||||
case PSD.COMPRESSION_NONE:
|
case PSD.COMPRESSION_NONE:
|
||||||
System.err.println("NONE");
|
|
||||||
break;
|
break;
|
||||||
case PSD.COMPRESSION_RLE:
|
case PSD.COMPRESSION_RLE:
|
||||||
System.err.println("RLE");
|
|
||||||
// NOTE: Offsets will allow us to easily skip rows before AOI
|
// NOTE: Offsets will allow us to easily skip rows before AOI
|
||||||
offsets = new int[mHeader.mChannels * mHeader.mHeight];
|
offsets = new int[mHeader.mChannels * mHeader.mHeight];
|
||||||
for (int i = 0; i < offsets.length; i++) {
|
for (int i = 0; i < offsets.length; i++) {
|
||||||
@ -515,7 +513,7 @@ public class PSDImageReader extends ImageReaderBase {
|
|||||||
|
|
||||||
final int destWidth = (pDest.width + 7) / 8;
|
final int destWidth = (pDest.width + 7) / 8;
|
||||||
|
|
||||||
int x = 0, y = 0;
|
int y = 0;
|
||||||
try {
|
try {
|
||||||
for (y = 0; y < mHeader.mHeight; y++) {
|
for (y = 0; y < mHeader.mHeight; y++) {
|
||||||
int length = pRLECompressed ? pRowOffsets[y] : mHeader.mWidth;
|
int length = pRLECompressed ? pRowOffsets[y] : mHeader.mWidth;
|
||||||
@ -536,41 +534,40 @@ public class PSDImageReader extends ImageReaderBase {
|
|||||||
mImageInput.readFully(row, 0, row.length);
|
mImageInput.readFully(row, 0, row.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Destination offset...??
|
// TODO: Destination offset...??
|
||||||
int offset = (y - pSource.y) / pYSub * destWidth;
|
int offset = (y - pSource.y) / pYSub * destWidth;
|
||||||
if (pXSub == 1) {
|
if (pXSub == 1) {
|
||||||
// Fast normal case, no sub sampling
|
// Fast normal case, no sub sampling
|
||||||
for (int i = 0; i < destWidth; i++) {
|
for (int i = 0; i < destWidth; i++) {
|
||||||
byte value = row[pSource.x + i * pXSub];
|
byte value = row[pSource.x + i * pXSub];
|
||||||
data[offset + i] = (byte) (~value & 0xff); // Invert bits to match Java default monochrome
|
// NOTE: Invert bits to match Java's default monochrome
|
||||||
|
data[offset + i] = (byte) (~value & 0xff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Copy line sub sampled into real data
|
// Copy line sub sampled into real data
|
||||||
int bitPos = pSource.x;
|
int x = pSource.x;
|
||||||
for (int i = 0; i < destWidth; i++) {
|
for (int i = 0; i < destWidth; i++) {
|
||||||
// TODO: FIXME!
|
// TODO: FIXME!
|
||||||
byte result = 0;
|
byte result = 0;
|
||||||
for (int j = 0; j < 8; j++) {
|
for (int j = 0; j < 8; j++) {
|
||||||
int mask = 0x80 >> bitPos % 8;
|
int pos = x / 8;
|
||||||
System.out.println("result: " + Integer.toBinaryString(result & 0xff));
|
if (pos >= row.length) {
|
||||||
System.out.println("mask: " + Integer.toBinaryString(mask));
|
break;
|
||||||
System.out.println("bitPos: " + bitPos);
|
}
|
||||||
|
|
||||||
int pos = pSource.x / 8 + i + bitPos / 8;
|
int sourceBitOff = x % 8;
|
||||||
System.out.println("pos: " + pos);
|
int mask = 0x80 >> sourceBitOff;
|
||||||
result |= (row[pos] & mask) >> bitPos / 8;
|
|
||||||
bitPos += pXSub;
|
result |= (((row[pos] & mask) != 0) ? 1 : 0) << 7 - j;
|
||||||
|
|
||||||
|
x += pXSub;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("--> result: " + Integer.toBinaryString(result & 0xff));
|
// NOTE: Invert bits to match Java's default monochrome
|
||||||
System.out.println();
|
data[offset + i] = (byte) (~result & 0xff);
|
||||||
|
|
||||||
data[offset + i] = (byte) (~result & 0xff); // Invert bits to match Java default monochrome
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
mImageInput.skipBytes(length);
|
mImageInput.skipBytes(length);
|
||||||
@ -584,14 +581,12 @@ public class PSDImageReader extends ImageReaderBase {
|
|||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
System.err.println("y: " + y);
|
System.err.println("y: " + y);
|
||||||
System.err.println("x: " + x);
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
catch (IndexOutOfBoundsException e) {
|
catch (IndexOutOfBoundsException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
System.out.println("data.length: " + data.length);
|
System.out.println("data.length: " + data.length);
|
||||||
System.err.println("y: " + y);
|
System.err.println("y: " + y);
|
||||||
System.err.println("x: " + x);
|
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user