Files
nuknal efd824cc8a aux
2024-05-20 11:08:24 +08:00

79 lines
1.5 KiB
Go

package extract
import (
"bufio"
"io"
"os"
"path/filepath"
"strings"
"github.com/sirupsen/logrus"
)
const (
AUX = ".AUX"
EB_AUX = ".EB.AUX"
PLAT_AUX = ".PLAT.AUX"
PAN_RAW = "PAN.RAW"
MSS_RAW = "MSS.RAW"
PAN_HDR = "PAN.HDR"
MSS_HDR = "MSS.HDR"
MSS_ALL_IN_ONE = "MSS_ALL_IN_ONE"
)
type l0w struct {
w *bufio.Writer
f *os.File
name string
}
type L0Writer struct {
mssStoredType string
ws map[string]*l0w
}
func newL0Writer(outputDir, name string) *L0Writer {
var err error
suffix := []string{AUX, PAN_RAW, MSS_RAW, PAN_HDR, MSS_HDR}
nameEles := strings.Split(name, "_")
lw := &L0Writer{
ws: make(map[string]*l0w),
mssStoredType: MSS_ALL_IN_ONE,
}
for _, s := range suffix {
w := &l0w{}
fname := name + s
if s == MSS_HDR || s == MSS_RAW || s == PAN_HDR || s == PAN_RAW {
eles := strings.Split(s, ".")
nameEles[1] = eles[0]
fname = strings.Join(nameEles, "_") + "." + eles[1]
}
w.name = filepath.Join(outputDir, fname)
w.f, err = os.OpenFile(w.name, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
if err != nil {
logrus.Panic("create file failed: ", w.name, err)
}
w.w = bufio.NewWriter(w.f)
lw.ws[s] = w
}
return lw
}
func (lw *L0Writer) Close() {
for _, w := range lw.ws {
w.w.Flush()
w.f.Close()
}
}
// 写入 16 位像素值,小端序
func write16bPixelLittleEndian(w io.Writer, data []byte) (int, error) {
for i := 0; i < len(data)-1; i += 2 {
data[i], data[i+1] = data[i+1], data[i]
}
return w.Write(data)
}