xwd output - unknown header

sed -e '
   /^ord:/,/^--*$/!b
   H; /^ord:/h
   /^--*$/!d; g
   /^ord:chandru[ ]/!d
   /\n[ ]*KEY:ZZ\n--*$/!d
'  sample.txt

Краткое содержание: /../,/../ => - оператор диапазона для выбора диапазона строк, например, в вашем случае от / ord: / до / ---- / .

Мы перемещаем эти диапазоны (диапазон за раз) в зону трюма. Затем, когда мы находимся в конце диапазона / --- / , мы знаем, что пришло время выбрать или отклонить этот конкретный диапазон на основе критериев, которые `a) / ord: chandru / && b ) / ключ: ZZ / '

1
15.12.2017, 17:18
1 ответ

Файл include /usr/include/X11/XWDFile.h, который является частью X11, содержит больше информации. Я нашел этот файл в rpm xorg-x11-proto-devel в моей системе. В частности, HeaderSize, который, согласно вашей ссылке, всегда равен 40, неверен. В заголовочном файле сказано header_size = SIZEOF(XWDheader) + длина null-terminated имени окна. Далее в файле есть полезные комментарии

Нуль-терминированное имя окна следует за вышеприведенной структурой. Далее следуют структуры XWDColor, по смещению XWDFileHeader.header_size в файле. XWDFileHeader.ncolors указывает, сколько структур XWDColor есть.

Вот небольшая программа на языке python для чтения начала файла xwd и печати некоторой информации. Он вычисляет смещение до первых пикселей изображения:

#!/usr/bin/python
import sys, struct

XWDColorlen = 4*3*2+2*1
MSBFirst = 1

class Xwd:
    def __init__(self,data):
        (self.header_size,
        self.file_version,
        self.pixmap_format,
        self.pixmap_depth,
        self.pixmap_width,
        self.pixmap_height,
        self.xoffset,
        self.byte_order,
        self.bitmap_unit,
        self.bitmap_bit_order,
        self.bitmap_pad,
        self.bits_per_pixel,
        self.bytes_per_line,
        self.visual_class,
        self.red_mask,
        self.green_mask,
        self.blue_mask,
        self.bits_per_rgb,
        self.colormap_entries,
        self.ncolors,
        self.window_width,
        self.window_height,
        self.window_x,
        self.window_y,
        self.window_bdrwidth) = struct.unpack(">25I",data[:100])

f = file(sys.argv[1])
data = f.read()
xwd = Xwd(data)
print("header_size %d  ncolors %d" % (xwd.header_size, xwd.ncolors))

offset = xwd.header_size+xwd.ncolors*XWDColorlen
print("offset %d 0x%x" % (offset,offset))
print("bits_per_pixel %d" % xwd.bits_per_pixel)
if xwd.bits_per_pixel==32:
    if xwd.byte_order==MSBFirst:
        fmt = ">I"
    else:
        fmt = "<I"
    for i in range(20):
        print("%08x" % struct.unpack(fmt,data[offset:offset+4]))
        offset += 4

Примененный к предоставленному вами примеру данных, он говорит

header_size 124  ncolors 256
offset 6780 0x1a7c
bits_per_pixel 32

Я вижу, что существует также perl pod для исследования изображений xwd.

1
27.01.2020, 23:46

Теги

Похожие вопросы