Skip to content

Commit

Permalink
Improve compression with wrapping component values.
Browse files Browse the repository at this point in the history
Fix #13
  • Loading branch information
pfusik committed Jan 13, 2024
1 parent 34f42d3 commit 4870739
Show file tree
Hide file tree
Showing 10 changed files with 30 additions and 30 deletions.
6 changes: 3 additions & 3 deletions QOI.fu
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ public class QOIEncoder
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 0xff);
int dg = g - (lastPixel >> 8 & 0xff);
int db = b - (lastPixel & 0xff);
int dr = (r - (lastPixel >> 16) & 0xff ^ 0x80) - 0x80;
int dg = (g - (lastPixel >> 8) & 0xff ^ 0x80) - 0x80;
int db = (b - lastPixel & 0xff ^ 0x80) - 0x80;
if (dr >= -2 && dr <= 1
&& dg >= -2 && dg <= 1
&& db >= -2 && db <= 1)
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,9 +163,9 @@ bool QOIEncoder_Encode(QOIEncoder *self, int width, int height, int const *pixel
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 255);
int dg = g - (lastPixel >> 8 & 255);
int db = b - (lastPixel & 255);
int dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
int dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
int db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = (uint8_t) (106 + (dr << 4) + (dg << 2) + db);
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,9 @@ bool QOIEncoder::encode(int width, int height, int const * pixels, bool alpha, b
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 255);
int dg = g - (lastPixel >> 8 & 255);
int db = b - (lastPixel & 255);
int dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
int dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
int db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = static_cast<uint8_t>(106 + (dr << 4) + (dg << 2) + db);
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,9 @@ public bool Encode(int width, int height, int[] pixels, bool alpha, bool linearC
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 255);
int dg = g - (lastPixel >> 8 & 255);
int db = b - (lastPixel & 255);
int dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
int dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
int db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = (byte) (106 + (dr << 4) + (dg << 2) + db);
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.d
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,9 @@ class QOIEncoder
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 255);
int dg = g - (lastPixel >> 8 & 255);
int db = b - (lastPixel & 255);
int dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
int dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
int db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = cast(ubyte)(106 + (dr << 4) + (dg << 2) + db);
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ export class QOIEncoder
encodedOffset += 5;
}
else {
let dr = r - (lastPixel >> 16 & 255);
let dg = g - (lastPixel >> 8 & 255);
let db = b - (lastPixel & 255);
let dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
let dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
let db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = 106 + (dr << 4) + (dg << 2) + db;
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,9 @@ def encode(self, width: int, height: int, pixels: array.array, alpha: bool, line
encoded[encoded_offset + 4] = pixel >> 24 & 255
encoded_offset += 5
else:
dr: int = r - (last_pixel >> 16 & 255)
dg: int = g - (last_pixel >> 8 & 255)
db: int = b - (last_pixel & 255)
dr: int = (((r - (last_pixel >> 16)) & 255) ^ 128) - 128
dg: int = (((g - (last_pixel >> 8)) & 255) ^ 128) - 128
db: int = (((b - last_pixel) & 255) ^ 128) - 128
if dr >= -2 and dr <= 1 and dg >= -2 and dg <= 1 and db >= -2 and db <= 1:
encoded[encoded_offset] = 106 + (dr << 4) + (dg << 2) + db
encoded_offset += 1
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -99,9 +99,9 @@ public class QOIEncoder
encodedOffset += 5
}
else {
var dr : Int = r - lastPixel >> 16 & 255
let dg : Int = g - lastPixel >> 8 & 255
var db : Int = b - lastPixel & 255
var dr : Int = (r - lastPixel >> 16) & 255 ^ 128 - 128
let dg : Int = (g - lastPixel >> 8) & 255 ^ 128 - 128
var db : Int = (b - lastPixel) & 255 ^ 128 - 128
if dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1 {
encoded[encodedOffset] = UInt8(106 + dr << 4 + dg << 2 + db)
encodedOffset += 1
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ export class QOIEncoder
encodedOffset += 5;
}
else {
let dr: number = r - (lastPixel >> 16 & 255);
let dg: number = g - (lastPixel >> 8 & 255);
let db: number = b - (lastPixel & 255);
let dr: number = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
let dg: number = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
let db: number = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = 106 + (dr << 4) + (dg << 2) + db;
else {
Expand Down
6 changes: 3 additions & 3 deletions transpiled/QOIEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -97,9 +97,9 @@ public final boolean encode(int width, int height, int[] pixels, boolean alpha,
encodedOffset += 5;
}
else {
int dr = r - (lastPixel >> 16 & 255);
int dg = g - (lastPixel >> 8 & 255);
int db = b - (lastPixel & 255);
int dr = (((r - (lastPixel >> 16)) & 255) ^ 128) - 128;
int dg = (((g - (lastPixel >> 8)) & 255) ^ 128) - 128;
int db = (((b - lastPixel) & 255) ^ 128) - 128;
if (dr >= -2 && dr <= 1 && dg >= -2 && dg <= 1 && db >= -2 && db <= 1)
encoded[encodedOffset++] = (byte) (106 + (dr << 4) + (dg << 2) + db);
else {
Expand Down

0 comments on commit 4870739

Please sign in to comment.