[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: kdelibs/kimgio
From: Melchior Franz <mfranz () kde ! org>
Date: 2005-01-10 19:54:20
Message-ID: 20050110195420.288381CF7C () office ! kde ! org
[Download RAW message or body]
CVS commit by mfranz:
improve RLE compression for noisy images
M +24 -16 rgb.cpp 1.31
--- kdelibs/kimgio/rgb.cpp #1.30:1.31
@@ -352,22 +352,30 @@ uchar SGIImage::intensity(uchar c)
uint SGIImage::compact(uchar *d, uchar *s)
{
- uchar *dest = d, *src = s, patt, *cnt;
- int n;
- while (src - s < m_xsize) {
- if (src - s + 1 == m_xsize) { // last bit
- *dest++ = 0x81;
- *dest++ = *src;
+ uchar *dest = d, *src = s, patt, *t, *end = s + m_xsize;
+ int i, n;
+ while (src < end) {
+ for (n = 0, t = src; t + 2 < end && !(*t == t[1] && *t == t[2]); t++)
+ n++;
+
+ while (n) {
+ i = n > 126 ? 126 : n;
+ n -= i;
+ *dest++ = 0x80 | i;
+ while (i--)
+ *dest++ = *src++;
+ }
+
+ if (src == end)
break;
- } else if (*src == src[1]) {
+
patt = *src++;
- for (n = 1; src - s < m_xsize && n < 126 && *src == patt; src++)
+ for (n = 1; src < end && *src == patt; src++)
n++;
- *dest++ = n;
+
+ while (n) {
+ i = n > 126 ? 126 : n;
+ n -= i;
+ *dest++ = i;
*dest++ = patt;
- } else {
- cnt = dest++;
- for (n = 0; src - s < m_xsize && n < 126 && *src != src[1]; n++)
- *dest++ = *src++;
- *cnt = 0x80 | n;
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic