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

WM_PICTURE

構造体
サイズx64: 29 バイト / x86: 17 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
pwszMIMETypeLPWSTR8/4+0+0画像の MIME (multipurpose Internet mail extension) タイプを格納する、ワイド文字の null 終端文字列へのポインターです。
bPictureTypeBYTE1+8+4

次のいずれかの値を格納する BYTE 値です。

説明
0 この表に明示的に記載されていない種類の画像
1 32 ピクセル × 32 ピクセルのファイルアイコン。portable network graphics (PNG) 形式でのみ使用します
2 上記のタイプ 1 に準拠しないファイルアイコン
3 アルバムの表表紙
4 アルバムの裏表紙
5 リーフレットのページ
6 メディア。通常、この種類の画像は CD のレーベル面です
7 リードアーティスト、リード演奏者、またはソリストの画像
8 アーティストまたは演奏者のいずれかの画像
9 指揮者の画像
10 バンドまたはオーケストラの画像
11 作曲者の画像
12 作詞者または著作者の画像
13 レコーディングスタジオまたは録音場所の画像
14 レコーディングセッション中に撮影された画像
15 演奏中に撮影された画像
16 映画またはビデオからの画面キャプチャ
17 明るい色の魚
18 イラスト
19 バンドまたはアーティストのロゴ
20 発行元またはスタジオのロゴ
pwszDescriptionLPWSTR8/4+9+5画像の説明を格納する、ワイド文字の null 終端文字列へのポインターです。
dwDataLenDWORD4+17+9pbData が指す画像データのサイズ (バイト単位) を格納する DWORD 値です。
pbDataBYTE*8/4+21+13画像データを格納する BYTE 配列へのポインターです。

公式ドキュメント

[このページに関連する機能である Windows Media Format 11 SDK は、レガシー機能です。この機能は Source Reader および Sink Writer に置き換えられました。Source ReaderSink Writer は Windows 10 および Windows 11 向けに最適化されています。Microsoft は、可能な場合は新しいコードで Windows Media Format 11 SDK ではなく Source ReaderSink Writer を使用することを強く推奨します。また、レガシー API を使用している既存のコードについても、可能であれば新しい API を使用するように書き換えることを推奨します。]

WM_PICTURE 構造体は、WM/Picture 複合メタデータ属性のデータ項目として使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// WM_PICTURE  (x64 29 / x86 17 バイト)
#pragma pack(push, 1)
typedef struct WM_PICTURE {
    LPWSTR pwszMIMEType;
    BYTE bPictureType;
    LPWSTR pwszDescription;
    DWORD dwDataLen;
    BYTE* pbData;
} WM_PICTURE;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct WM_PICTURE
{
    public IntPtr pwszMIMEType;
    public byte bPictureType;
    public IntPtr pwszDescription;
    public uint dwDataLen;
    public IntPtr pbData;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure WM_PICTURE
    Public pwszMIMEType As IntPtr
    Public bPictureType As Byte
    Public pwszDescription As IntPtr
    Public dwDataLen As UInteger
    Public pbData As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WM_PICTURE(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("pwszMIMEType", ctypes.c_void_p),
        ("bPictureType", ctypes.c_ubyte),
        ("pwszDescription", ctypes.c_void_p),
        ("dwDataLen", wintypes.DWORD),
        ("pbData", ctypes.c_void_p),
    ]
#[repr(C, packed(1))]
pub struct WM_PICTURE {
    pub pwszMIMEType: *mut core::ffi::c_void,
    pub bPictureType: u8,
    pub pwszDescription: *mut core::ffi::c_void,
    pub dwDataLen: u32,
    pub pbData: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WM_PICTURE struct {
	pwszMIMEType uintptr
	bPictureType byte
	pwszDescription uintptr
	dwDataLen uint32
	pbData uintptr
}
type
  WM_PICTURE = packed record
    pwszMIMEType: Pointer;
    bPictureType: Byte;
    pwszDescription: Pointer;
    dwDataLen: DWORD;
    pbData: Pointer;
  end;
const WM_PICTURE = extern struct {
    pwszMIMEType: ?*anyopaque,
    bPictureType: u8,
    pwszDescription: ?*anyopaque,
    dwDataLen: u32,
    pbData: ?*anyopaque,
};
type
  WM_PICTURE {.packed.} = object
    pwszMIMEType: pointer
    bPictureType: uint8
    pwszDescription: pointer
    dwDataLen: uint32
    pbData: pointer
align(1)
struct WM_PICTURE
{
    void* pwszMIMEType;
    ubyte bPictureType;
    void* pwszDescription;
    uint dwDataLen;
    void* pbData;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WM_PICTURE サイズ: 17 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 17 / 4 切り上げ)
; pwszMIMEType : LPWSTR (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; bPictureType : BYTE (+4, 1byte)  poke st,4,値  /  値 = peek(st,4)
; pwszDescription : LPWSTR (+5, 4byte)  lpoke st,5,値  /  値 = lpeek(st,5)
; dwDataLen : DWORD (+9, 4byte)  lpoke st,9,値  /  値 = lpeek(st,9)
; pbData : BYTE* (+13, 4byte)  lpoke st,13,値  /  値 = lpeek(st,13)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WM_PICTURE サイズ: 29 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 29 / 4 切り上げ)
; pwszMIMEType : LPWSTR (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; bPictureType : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; pwszDescription : LPWSTR (+9, 8byte)  qpoke st,9,値 / qpeek(st,9)  ※IronHSPのみ。3.7/3.8は lpoke st,9,下位 : lpoke st,13,上位
; dwDataLen : DWORD (+17, 4byte)  lpoke st,17,値  /  値 = lpeek(st,17)
; pbData : BYTE* (+21, 8byte)  qpoke st,21,値 / qpeek(st,21)  ※IronHSPのみ。3.7/3.8は lpoke st,21,下位 : lpoke st,25,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WM_PICTURE, pack=1
    #field intptr pwszMIMEType
    #field byte bPictureType
    #field intptr pwszDescription
    #field int dwDataLen
    #field intptr pbData
#endstruct

stdim st, WM_PICTURE        ; NSTRUCT 変数を確保
st->bPictureType = 100
mes "bPictureType=" + st->bPictureType