⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 incrcomp.cpp

📁 非常好用的五子棋游戏源码
💻 CPP
字号:
// Created:10-13-98
// By Jeff Connelly

// Incremenal compression.

// HIGHLY EXPERIMENTAL

// Good input data would be something like 00 01 02 03 04 05 06 07 ... FF
// That would mean 256 would be packed into 3, a ratio of 85.3% percent!
// Designed for photos, see documentation for more information.

#include "stdafx.h"
#define EXPORTING
#include "comprlib.h"

// Writes a single bit, 'bit' to the output file
static void write_bit (bool bit)
{
    static unsigned int buffer = 0, mask = 0x80;   // about 0xFF / 2
    if (bit)
        buffer |= mask;
    if (!(mask >>= 1))
    {
        write_byte (buffer);
        buffer = 0;
        mask = 0x80;
    }
}

// Sends all remaining bits from the bit buffer
static void flush_bit_buffer()
{
    int i = 7;
    while (i--)
        write_bit(0);
}

static bool read_bit()
{
    static unsigned int buffer, mask = 0;
    if (!(mask >> 1))
    {
        buffer = read_byte();
        mask = 0x80;
    }
    return ((buffer & mask) != 0);
} 

void incr_encode()
{
    write_bit(1);
    write_bit(0);
    write_bit(0);
    write_bit(0);
    write_bit(0);
    write_bit(0);
    write_bit(0);
    write_bit(0);

    return;

    // Character and previous character
    register char c = 0, prevc;
    // Difference of character and previous character, and previous diff
    int diff = 0, lastdiff;
    // Number of times the diffs were repeated
    int repeated = 0;

    register int i;

    while (!end_of_data())
    {
        // Previous values
        prevc = c;
        lastdiff = diff;

        c = read_byte();
        diff = c - prevc;

        printf ("%d - %d = %d\n", c, prevc, diff);

        if (diff == lastdiff)       // Repeated difference
        {
            if (!repeated)
            {
                // This is a beginning of a repeated value
            } else {
                // Not beginning of repeated value
            }

            ++repeated;

            printf ("Repeated diff: %d\n", repeated);

        } else if (repeated) {      // End of repeated value
            // The file format is: (bits)
            //      012345678 (note one extra bit)
            // The extra bit, 0, is 0 for an unencoded byte or 1 for
            // a triplet of three compressed bytes following:
            //      startbyte incr endbyte
             
            write_bit(1);       // Compressed
            for (i = 0; i < 0xFF; i <<= 1)
            {
                write_bit(prevc & i);
            }
                
        } else {                    // Plain, normal, non-repeated
            // blah blah blah
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -