Win32 API 日本語リファレンス
ホームMedia.Streaming › HistogramHeader

HistogramHeader

構造体
サイズx64: 40 バイト / x86: 40 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
SizeDWORD4+0+0このヒストグラムヘッダ構造体のサイズをバイトで示す。
BinsDWORD4+4+4ヒストグラムの階級(ビン)数。
FourCCDWORD4+8+8対象色フォーマットを示す4文字コード(FOURCC)。
ChannelMasksDWORD4+12+12ヒストグラムが対象とする色チャネルのマスク(ビット)。
GridHistogramGrid24+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 Structure
import 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: HistogramGrid
struct 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