79 lines
1.5 KiB
Go
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)
|
|
}
|