ホーム › UI.ColorSystem › EMRCREATECOLORSPACE
EMRCREATECOLORSPACE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| emr | EMR | 8 | +0 | +0 | 拡張メタファイルレコード共通ヘッダー。 |
| ihCS | DWORD | 4 | +8 | +8 | メタファイル内の色空間ハンドルインデックス。 |
| lcs | LOGCOLORSPACEA | 328 | +12 | +12 | 作成する論理色空間を定義するLOGCOLORSPACEA構造体。 |
各言語での定義
#include <windows.h>
// EMR (x64 8 / x86 8 バイト)
typedef struct EMR {
ENHANCED_METAFILE_RECORD_TYPE iType;
DWORD nSize;
} EMR;
// CIEXYZ (x64 12 / x86 12 バイト)
typedef struct CIEXYZ {
INT ciexyzX;
INT ciexyzY;
INT ciexyzZ;
} CIEXYZ;
// CIEXYZTRIPLE (x64 36 / x86 36 バイト)
typedef struct CIEXYZTRIPLE {
CIEXYZ ciexyzRed;
CIEXYZ ciexyzGreen;
CIEXYZ ciexyzBlue;
} CIEXYZTRIPLE;
// LOGCOLORSPACEA (x64 328 / x86 328 バイト)
typedef struct LOGCOLORSPACEA {
DWORD lcsSignature;
DWORD lcsVersion;
DWORD lcsSize;
LCSCSTYPE lcsCSType;
INT lcsIntent;
CIEXYZTRIPLE lcsEndpoints;
DWORD lcsGammaRed;
DWORD lcsGammaGreen;
DWORD lcsGammaBlue;
CHAR lcsFilename[260];
} LOGCOLORSPACEA;
// EMRCREATECOLORSPACE (x64 340 / x86 340 バイト)
typedef struct EMRCREATECOLORSPACE {
EMR emr;
DWORD ihCS;
LOGCOLORSPACEA lcs;
} EMRCREATECOLORSPACE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EMR
{
public uint iType;
public uint nSize;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CIEXYZ
{
public int ciexyzX;
public int ciexyzY;
public int ciexyzZ;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CIEXYZTRIPLE
{
public CIEXYZ ciexyzRed;
public CIEXYZ ciexyzGreen;
public CIEXYZ ciexyzBlue;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LOGCOLORSPACEA
{
public uint lcsSignature;
public uint lcsVersion;
public uint lcsSize;
public int lcsCSType;
public int lcsIntent;
public CIEXYZTRIPLE lcsEndpoints;
public uint lcsGammaRed;
public uint lcsGammaGreen;
public uint lcsGammaBlue;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] lcsFilename;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EMRCREATECOLORSPACE
{
public EMR emr;
public uint ihCS;
public LOGCOLORSPACEA lcs;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EMR
Public iType As UInteger
Public nSize As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CIEXYZ
Public ciexyzX As Integer
Public ciexyzY As Integer
Public ciexyzZ As Integer
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CIEXYZTRIPLE
Public ciexyzRed As CIEXYZ
Public ciexyzGreen As CIEXYZ
Public ciexyzBlue As CIEXYZ
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LOGCOLORSPACEA
Public lcsSignature As UInteger
Public lcsVersion As UInteger
Public lcsSize As UInteger
Public lcsCSType As Integer
Public lcsIntent As Integer
Public lcsEndpoints As CIEXYZTRIPLE
Public lcsGammaRed As UInteger
Public lcsGammaGreen As UInteger
Public lcsGammaBlue As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public lcsFilename() As SByte
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EMRCREATECOLORSPACE
Public emr As EMR
Public ihCS As UInteger
Public lcs As LOGCOLORSPACEA
End Structureimport ctypes
from ctypes import wintypes
class EMR(ctypes.Structure):
_fields_ = [
("iType", wintypes.DWORD),
("nSize", wintypes.DWORD),
]
class CIEXYZ(ctypes.Structure):
_fields_ = [
("ciexyzX", ctypes.c_int),
("ciexyzY", ctypes.c_int),
("ciexyzZ", ctypes.c_int),
]
class CIEXYZTRIPLE(ctypes.Structure):
_fields_ = [
("ciexyzRed", CIEXYZ),
("ciexyzGreen", CIEXYZ),
("ciexyzBlue", CIEXYZ),
]
class LOGCOLORSPACEA(ctypes.Structure):
_fields_ = [
("lcsSignature", wintypes.DWORD),
("lcsVersion", wintypes.DWORD),
("lcsSize", wintypes.DWORD),
("lcsCSType", ctypes.c_int),
("lcsIntent", ctypes.c_int),
("lcsEndpoints", CIEXYZTRIPLE),
("lcsGammaRed", wintypes.DWORD),
("lcsGammaGreen", wintypes.DWORD),
("lcsGammaBlue", wintypes.DWORD),
("lcsFilename", ctypes.c_byte * 260),
]
class EMRCREATECOLORSPACE(ctypes.Structure):
_fields_ = [
("emr", EMR),
("ihCS", wintypes.DWORD),
("lcs", LOGCOLORSPACEA),
]#[repr(C)]
pub struct EMR {
pub iType: u32,
pub nSize: u32,
}
#[repr(C)]
pub struct CIEXYZ {
pub ciexyzX: i32,
pub ciexyzY: i32,
pub ciexyzZ: i32,
}
#[repr(C)]
pub struct CIEXYZTRIPLE {
pub ciexyzRed: CIEXYZ,
pub ciexyzGreen: CIEXYZ,
pub ciexyzBlue: CIEXYZ,
}
#[repr(C)]
pub struct LOGCOLORSPACEA {
pub lcsSignature: u32,
pub lcsVersion: u32,
pub lcsSize: u32,
pub lcsCSType: i32,
pub lcsIntent: i32,
pub lcsEndpoints: CIEXYZTRIPLE,
pub lcsGammaRed: u32,
pub lcsGammaGreen: u32,
pub lcsGammaBlue: u32,
pub lcsFilename: [i8; 260],
}
#[repr(C)]
pub struct EMRCREATECOLORSPACE {
pub emr: EMR,
pub ihCS: u32,
pub lcs: LOGCOLORSPACEA,
}import "golang.org/x/sys/windows"
type EMR struct {
iType uint32
nSize uint32
}
type CIEXYZ struct {
ciexyzX int32
ciexyzY int32
ciexyzZ int32
}
type CIEXYZTRIPLE struct {
ciexyzRed CIEXYZ
ciexyzGreen CIEXYZ
ciexyzBlue CIEXYZ
}
type LOGCOLORSPACEA struct {
lcsSignature uint32
lcsVersion uint32
lcsSize uint32
lcsCSType int32
lcsIntent int32
lcsEndpoints CIEXYZTRIPLE
lcsGammaRed uint32
lcsGammaGreen uint32
lcsGammaBlue uint32
lcsFilename [260]int8
}
type EMRCREATECOLORSPACE struct {
emr EMR
ihCS uint32
lcs LOGCOLORSPACEA
}type
EMR = record
iType: DWORD;
nSize: DWORD;
end;
CIEXYZ = record
ciexyzX: Integer;
ciexyzY: Integer;
ciexyzZ: Integer;
end;
CIEXYZTRIPLE = record
ciexyzRed: CIEXYZ;
ciexyzGreen: CIEXYZ;
ciexyzBlue: CIEXYZ;
end;
LOGCOLORSPACEA = record
lcsSignature: DWORD;
lcsVersion: DWORD;
lcsSize: DWORD;
lcsCSType: Integer;
lcsIntent: Integer;
lcsEndpoints: CIEXYZTRIPLE;
lcsGammaRed: DWORD;
lcsGammaGreen: DWORD;
lcsGammaBlue: DWORD;
lcsFilename: array[0..259] of Shortint;
end;
EMRCREATECOLORSPACE = record
emr: EMR;
ihCS: DWORD;
lcs: LOGCOLORSPACEA;
end;const EMR = extern struct {
iType: u32,
nSize: u32,
};
const CIEXYZ = extern struct {
ciexyzX: i32,
ciexyzY: i32,
ciexyzZ: i32,
};
const CIEXYZTRIPLE = extern struct {
ciexyzRed: CIEXYZ,
ciexyzGreen: CIEXYZ,
ciexyzBlue: CIEXYZ,
};
const LOGCOLORSPACEA = extern struct {
lcsSignature: u32,
lcsVersion: u32,
lcsSize: u32,
lcsCSType: i32,
lcsIntent: i32,
lcsEndpoints: CIEXYZTRIPLE,
lcsGammaRed: u32,
lcsGammaGreen: u32,
lcsGammaBlue: u32,
lcsFilename: [260]i8,
};
const EMRCREATECOLORSPACE = extern struct {
emr: EMR,
ihCS: u32,
lcs: LOGCOLORSPACEA,
};type
EMR {.bycopy.} = object
iType: uint32
nSize: uint32
CIEXYZ {.bycopy.} = object
ciexyzX: int32
ciexyzY: int32
ciexyzZ: int32
CIEXYZTRIPLE {.bycopy.} = object
ciexyzRed: CIEXYZ
ciexyzGreen: CIEXYZ
ciexyzBlue: CIEXYZ
LOGCOLORSPACEA {.bycopy.} = object
lcsSignature: uint32
lcsVersion: uint32
lcsSize: uint32
lcsCSType: int32
lcsIntent: int32
lcsEndpoints: CIEXYZTRIPLE
lcsGammaRed: uint32
lcsGammaGreen: uint32
lcsGammaBlue: uint32
lcsFilename: array[260, int8]
EMRCREATECOLORSPACE {.bycopy.} = object
emr: EMR
ihCS: uint32
lcs: LOGCOLORSPACEAstruct EMR
{
uint iType;
uint nSize;
}
struct CIEXYZ
{
int ciexyzX;
int ciexyzY;
int ciexyzZ;
}
struct CIEXYZTRIPLE
{
CIEXYZ ciexyzRed;
CIEXYZ ciexyzGreen;
CIEXYZ ciexyzBlue;
}
struct LOGCOLORSPACEA
{
uint lcsSignature;
uint lcsVersion;
uint lcsSize;
int lcsCSType;
int lcsIntent;
CIEXYZTRIPLE lcsEndpoints;
uint lcsGammaRed;
uint lcsGammaGreen;
uint lcsGammaBlue;
byte[260] lcsFilename;
}
struct EMRCREATECOLORSPACE
{
EMR emr;
uint ihCS;
LOGCOLORSPACEA lcs;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EMRCREATECOLORSPACE サイズ: 340 バイト(x64)
dim st, 85 ; 4byte整数×85(構造体サイズ 340 / 4 切り上げ)
; emr : EMR (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ihCS : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; lcs : LOGCOLORSPACEA (+12, 328byte) varptr(st)+12 を基点に操作(328byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global EMR
#field int iType
#field int nSize
#endstruct
#defstruct global CIEXYZ
#field int ciexyzX
#field int ciexyzY
#field int ciexyzZ
#endstruct
#defstruct global CIEXYZTRIPLE
#field CIEXYZ ciexyzRed
#field CIEXYZ ciexyzGreen
#field CIEXYZ ciexyzBlue
#endstruct
#defstruct global LOGCOLORSPACEA
#field int lcsSignature
#field int lcsVersion
#field int lcsSize
#field int lcsCSType
#field int lcsIntent
#field CIEXYZTRIPLE lcsEndpoints
#field int lcsGammaRed
#field int lcsGammaGreen
#field int lcsGammaBlue
#field byte lcsFilename 260
#endstruct
#defstruct global EMRCREATECOLORSPACE
#field EMR emr
#field int ihCS
#field LOGCOLORSPACEA lcs
#endstruct
stdim st, EMRCREATECOLORSPACE ; NSTRUCT 変数を確保
st->ihCS = 100
mes "ihCS=" + st->ihCS