ホーム › Graphics.Gdi › PANOSE
PANOSE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| bFamilyType | PAN_FAMILY_TYPE | 1 | +0 | +0 | PANOSE分類のファミリ種別を示す値。 |
| bSerifStyle | PAN_SERIF_STYLE | 1 | +1 | +1 | セリフのスタイルを示す値。 |
| bWeight | PAN_WEIGHT | 1 | +2 | +2 | フォントの太さ(ウェイト)を示す値。 |
| bProportion | PAN_PROPORTION | 1 | +3 | +3 | 文字の比率(プロポーション)を示す値。 |
| bContrast | PAN_CONTRAST | 1 | +4 | +4 | ストロークのコントラストを示す値。 |
| bStrokeVariation | PAN_STROKE_VARIATION | 1 | +5 | +5 | ストロークの太さの変化を示す値。 |
| bArmStyle | PAN_ARM_STYLE | 1 | +6 | +6 | アーム(腕)のスタイルを示す値。 |
| bLetterform | PAN_LETT_FORM | 1 | +7 | +7 | 字形(レターフォーム)を示す値。 |
| bMidline | PAN_MIDLINE | 1 | +8 | +8 | ミッドライン(中央線)のスタイルを示す値。 |
| bXHeight | PAN_XHEIGHT | 1 | +9 | +9 | エックスハイト(小文字の高さ)を示す値。 |
各言語での定義
#include <windows.h>
// PANOSE (x64 10 / x86 10 バイト)
typedef struct PANOSE {
PAN_FAMILY_TYPE bFamilyType;
PAN_SERIF_STYLE bSerifStyle;
PAN_WEIGHT bWeight;
PAN_PROPORTION bProportion;
PAN_CONTRAST bContrast;
PAN_STROKE_VARIATION bStrokeVariation;
PAN_ARM_STYLE bArmStyle;
PAN_LETT_FORM bLetterform;
PAN_MIDLINE bMidline;
PAN_XHEIGHT bXHeight;
} PANOSE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PANOSE
{
public byte bFamilyType;
public byte bSerifStyle;
public byte bWeight;
public byte bProportion;
public byte bContrast;
public byte bStrokeVariation;
public byte bArmStyle;
public byte bLetterform;
public byte bMidline;
public byte bXHeight;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PANOSE
Public bFamilyType As Byte
Public bSerifStyle As Byte
Public bWeight As Byte
Public bProportion As Byte
Public bContrast As Byte
Public bStrokeVariation As Byte
Public bArmStyle As Byte
Public bLetterform As Byte
Public bMidline As Byte
Public bXHeight As Byte
End Structureimport ctypes
from ctypes import wintypes
class PANOSE(ctypes.Structure):
_fields_ = [
("bFamilyType", ctypes.c_ubyte),
("bSerifStyle", ctypes.c_ubyte),
("bWeight", ctypes.c_ubyte),
("bProportion", ctypes.c_ubyte),
("bContrast", ctypes.c_ubyte),
("bStrokeVariation", ctypes.c_ubyte),
("bArmStyle", ctypes.c_ubyte),
("bLetterform", ctypes.c_ubyte),
("bMidline", ctypes.c_ubyte),
("bXHeight", ctypes.c_ubyte),
]#[repr(C)]
pub struct PANOSE {
pub bFamilyType: u8,
pub bSerifStyle: u8,
pub bWeight: u8,
pub bProportion: u8,
pub bContrast: u8,
pub bStrokeVariation: u8,
pub bArmStyle: u8,
pub bLetterform: u8,
pub bMidline: u8,
pub bXHeight: u8,
}import "golang.org/x/sys/windows"
type PANOSE struct {
bFamilyType byte
bSerifStyle byte
bWeight byte
bProportion byte
bContrast byte
bStrokeVariation byte
bArmStyle byte
bLetterform byte
bMidline byte
bXHeight byte
}type
PANOSE = record
bFamilyType: Byte;
bSerifStyle: Byte;
bWeight: Byte;
bProportion: Byte;
bContrast: Byte;
bStrokeVariation: Byte;
bArmStyle: Byte;
bLetterform: Byte;
bMidline: Byte;
bXHeight: Byte;
end;const PANOSE = extern struct {
bFamilyType: u8,
bSerifStyle: u8,
bWeight: u8,
bProportion: u8,
bContrast: u8,
bStrokeVariation: u8,
bArmStyle: u8,
bLetterform: u8,
bMidline: u8,
bXHeight: u8,
};type
PANOSE {.bycopy.} = object
bFamilyType: uint8
bSerifStyle: uint8
bWeight: uint8
bProportion: uint8
bContrast: uint8
bStrokeVariation: uint8
bArmStyle: uint8
bLetterform: uint8
bMidline: uint8
bXHeight: uint8struct PANOSE
{
ubyte bFamilyType;
ubyte bSerifStyle;
ubyte bWeight;
ubyte bProportion;
ubyte bContrast;
ubyte bStrokeVariation;
ubyte bArmStyle;
ubyte bLetterform;
ubyte bMidline;
ubyte bXHeight;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PANOSE サイズ: 10 バイト(x64)
dim st, 3 ; 4byte整数×3(構造体サイズ 10 / 4 切り上げ)
; bFamilyType : PAN_FAMILY_TYPE (+0, 1byte) poke st,0,値 / 値 = peek(st,0)
; bSerifStyle : PAN_SERIF_STYLE (+1, 1byte) poke st,1,値 / 値 = peek(st,1)
; bWeight : PAN_WEIGHT (+2, 1byte) poke st,2,値 / 値 = peek(st,2)
; bProportion : PAN_PROPORTION (+3, 1byte) poke st,3,値 / 値 = peek(st,3)
; bContrast : PAN_CONTRAST (+4, 1byte) poke st,4,値 / 値 = peek(st,4)
; bStrokeVariation : PAN_STROKE_VARIATION (+5, 1byte) poke st,5,値 / 値 = peek(st,5)
; bArmStyle : PAN_ARM_STYLE (+6, 1byte) poke st,6,値 / 値 = peek(st,6)
; bLetterform : PAN_LETT_FORM (+7, 1byte) poke st,7,値 / 値 = peek(st,7)
; bMidline : PAN_MIDLINE (+8, 1byte) poke st,8,値 / 値 = peek(st,8)
; bXHeight : PAN_XHEIGHT (+9, 1byte) poke st,9,値 / 値 = peek(st,9)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PANOSE
#field byte bFamilyType
#field byte bSerifStyle
#field byte bWeight
#field byte bProportion
#field byte bContrast
#field byte bStrokeVariation
#field byte bArmStyle
#field byte bLetterform
#field byte bMidline
#field byte bXHeight
#endstruct
stdim st, PANOSE ; NSTRUCT 変数を確保
st->bFamilyType = 100
mes "bFamilyType=" + st->bFamilyType