ホーム › Media.Streaming › HistogramHeader
HistogramHeader
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Size | DWORD | 4 | +0 | +0 | このヒストグラムヘッダ構造体のサイズをバイトで示す。 |
| Bins | DWORD | 4 | +4 | +4 | ヒストグラムの階級(ビン)数。 |
| FourCC | DWORD | 4 | +8 | +8 | 対象色フォーマットを示す4文字コード(FOURCC)。 |
| ChannelMasks | DWORD | 4 | +12 | +12 | ヒストグラムが対象とする色チャネルのマスク(ビット)。 |
| Grid | HistogramGrid | 24 | +16 | +16 | ヒストグラム算出に用いるグリッド情報(HistogramGrid)。 |
各言語での定義
#include <windows.h>
// RECT (x64 16 / x86 16 バイト)
typedef struct RECT {
INT left;
INT top;
INT right;
INT bottom;
} RECT;
// HistogramGrid (x64 24 / x86 24 バイト)
typedef struct HistogramGrid {
DWORD Width;
DWORD Height;
RECT Region;
} HistogramGrid;
// HistogramHeader (x64 40 / x86 40 バイト)
typedef struct HistogramHeader {
DWORD Size;
DWORD Bins;
DWORD FourCC;
DWORD ChannelMasks;
HistogramGrid Grid;
} HistogramHeader;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HistogramGrid
{
public uint Width;
public uint Height;
public RECT Region;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct HistogramHeader
{
public uint Size;
public uint Bins;
public uint FourCC;
public uint ChannelMasks;
public HistogramGrid Grid;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HistogramGrid
Public Width As UInteger
Public Height As UInteger
Public Region As RECT
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure HistogramHeader
Public Size As UInteger
Public Bins As UInteger
Public FourCC As UInteger
Public ChannelMasks As UInteger
Public Grid As HistogramGrid
End Structureimport ctypes
from ctypes import wintypes
class RECT(ctypes.Structure):
_fields_ = [
("left", ctypes.c_int),
("top", ctypes.c_int),
("right", ctypes.c_int),
("bottom", ctypes.c_int),
]
class HistogramGrid(ctypes.Structure):
_fields_ = [
("Width", wintypes.DWORD),
("Height", wintypes.DWORD),
("Region", RECT),
]
class HistogramHeader(ctypes.Structure):
_fields_ = [
("Size", wintypes.DWORD),
("Bins", wintypes.DWORD),
("FourCC", wintypes.DWORD),
("ChannelMasks", wintypes.DWORD),
("Grid", HistogramGrid),
]#[repr(C)]
pub struct RECT {
pub left: i32,
pub top: i32,
pub right: i32,
pub bottom: i32,
}
#[repr(C)]
pub struct HistogramGrid {
pub Width: u32,
pub Height: u32,
pub Region: RECT,
}
#[repr(C)]
pub struct HistogramHeader {
pub Size: u32,
pub Bins: u32,
pub FourCC: u32,
pub ChannelMasks: u32,
pub Grid: HistogramGrid,
}import "golang.org/x/sys/windows"
type RECT struct {
left int32
top int32
right int32
bottom int32
}
type HistogramGrid struct {
Width uint32
Height uint32
Region RECT
}
type HistogramHeader struct {
Size uint32
Bins uint32
FourCC uint32
ChannelMasks uint32
Grid HistogramGrid
}type
RECT = record
left: Integer;
top: Integer;
right: Integer;
bottom: Integer;
end;
HistogramGrid = record
Width: DWORD;
Height: DWORD;
Region: RECT;
end;
HistogramHeader = record
Size: DWORD;
Bins: DWORD;
FourCC: DWORD;
ChannelMasks: DWORD;
Grid: HistogramGrid;
end;const RECT = extern struct {
left: i32,
top: i32,
right: i32,
bottom: i32,
};
const HistogramGrid = extern struct {
Width: u32,
Height: u32,
Region: RECT,
};
const HistogramHeader = extern struct {
Size: u32,
Bins: u32,
FourCC: u32,
ChannelMasks: u32,
Grid: HistogramGrid,
};type
RECT {.bycopy.} = object
left: int32
top: int32
right: int32
bottom: int32
HistogramGrid {.bycopy.} = object
Width: uint32
Height: uint32
Region: RECT
HistogramHeader {.bycopy.} = object
Size: uint32
Bins: uint32
FourCC: uint32
ChannelMasks: uint32
Grid: HistogramGridstruct RECT
{
int left;
int top;
int right;
int bottom;
}
struct HistogramGrid
{
uint Width;
uint Height;
RECT Region;
}
struct HistogramHeader
{
uint Size;
uint Bins;
uint FourCC;
uint ChannelMasks;
HistogramGrid Grid;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HistogramHeader サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Size : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Bins : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; FourCC : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; ChannelMasks : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Grid : HistogramGrid (+16, 24byte) varptr(st)+16 を基点に操作(24byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global RECT
#field int left
#field int top
#field int right
#field int bottom
#endstruct
#defstruct global HistogramGrid
#field int Width
#field int Height
#field RECT Region
#endstruct
#defstruct global HistogramHeader
#field int Size
#field int Bins
#field int FourCC
#field int ChannelMasks
#field HistogramGrid Grid
#endstruct
stdim st, HistogramHeader ; NSTRUCT 変数を確保
st->Size = 100
mes "Size=" + st->Size