/
pxlxnski
/
ImageCompressionAlgorhitms
Обзор
Документация
Войти
/
pxlxnski
/
ImageCompressionAlgorhitms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
pkg/format/encoder.go
77 строк
2 KB
Egor Polyanskiy
RLE algorithm completed
16 дек 2025, 21:57
16 дек 2025, 21:57
2667a8d
Код
Авторство
О чём код?
package format import ( "encoding/binary" "fmt" "io" "os" ) func Encode(w io.Writer, img *CompressedImage) error { if err := binary.Write(w, binary.LittleEndian, uint32(MagicNumber)); err != nil { return fmt.Errorf("ошибка записи magic number: %w", err) } if err := binary.Write(w, binary.LittleEndian, uint16(Version)); err != nil { return fmt.Errorf("ошибка записи version: %w", err) } if err := binary.Write(w, binary.LittleEndian, img.Algorithm); err != nil { return fmt.Errorf("ошибка записи algorithm: %w", err) } if err := binary.Write(w, binary.LittleEndian, img.Width); err != nil { return fmt.Errorf("ошибка записи width: %w", err) } if err := binary.Write(w, binary.LittleEndian, img.Height); err != nil { return fmt.Errorf("ошибка записи height: %w", err) } if err := binary.Write(w, binary.LittleEndian, img.DataSize); err != nil { return fmt.Errorf("ошибка записи data size: %w", err) } if err := binary.Write(w, binary.LittleEndian, &img.FileHeader); err != nil { return fmt.Errorf("ошибка записи file header: %w", err) } rawHeaderSize := uint32(len(img.RawHeader)) if err := binary.Write(w, binary.LittleEndian, rawHeaderSize); err != nil { return fmt.Errorf("ошибка записи raw header size: %w", err) } if _, err := w.Write(img.RawHeader); err != nil { return fmt.Errorf("ошибка записи raw header: %w", err) } extraDataSize := uint32(len(img.ExtraData)) if err := binary.Write(w, binary.LittleEndian, extraDataSize); err != nil { return fmt.Errorf("ошибка записи extra data size: %w", err) } if len(img.ExtraData) > 0 { if _, err := w.Write(img.ExtraData); err != nil { return fmt.Errorf("ошибка записи extra data: %w", err) } } written, err := w.Write(img.Data) if err != nil { return fmt.Errorf("ошибка записи данных: %w", err) } if written != len(img.Data) { return fmt.Errorf("записано %d байт из %d", written, len(img.Data)) } return nil } func EncodeToFile(filename string, img *CompressedImage) error { file, err := os.Create(filename) if err != nil { return fmt.Errorf("не удалось создать файл: %w", err) } defer file.Close() return Encode(file, img) }