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

ICCompress

関数
単一の映像フレームを圧縮する。
DLLMSVFW32.dll呼出規約cdecl対応OSWindows 2000 以降

シグネチャ

// MSVFW32.dll
#include <windows.h>

DWORD ICCompress(
    HIC hic,
    DWORD dwFlags,
    BITMAPINFOHEADER* lpbiOutput,
    void* lpData,
    BITMAPINFOHEADER* lpbiInput,
    void* lpBits,
    DWORD* lpckid,   // optional
    DWORD* lpdwFlags,   // optional
    INT lFrameNum,
    DWORD dwFrameSize,
    DWORD dwQuality,
    BITMAPINFOHEADER* lpbiPrev,   // optional
    void* lpPrev   // optional
);

パラメーター

名前方向
hicHICin
dwFlagsDWORDin
lpbiOutputBITMAPINFOHEADER*in
lpDatavoid*out
lpbiInputBITMAPINFOHEADER*in
lpBitsvoid*in
lpckidDWORD*outoptional
lpdwFlagsDWORD*outoptional
lFrameNumINTin
dwFrameSizeDWORDin
dwQualityDWORDin
lpbiPrevBITMAPINFOHEADER*inoptional
lpPrevvoid*inoptional

戻り値の型: DWORD

各言語での呼び出し定義

// MSVFW32.dll
#include <windows.h>

DWORD ICCompress(
    HIC hic,
    DWORD dwFlags,
    BITMAPINFOHEADER* lpbiOutput,
    void* lpData,
    BITMAPINFOHEADER* lpbiInput,
    void* lpBits,
    DWORD* lpckid,   // optional
    DWORD* lpdwFlags,   // optional
    INT lFrameNum,
    DWORD dwFrameSize,
    DWORD dwQuality,
    BITMAPINFOHEADER* lpbiPrev,   // optional
    void* lpPrev   // optional
);
[DllImport("MSVFW32.dll", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
static extern uint ICCompress(
    IntPtr hic,   // HIC
    uint dwFlags,   // DWORD
    IntPtr lpbiOutput,   // BITMAPINFOHEADER*
    IntPtr lpData,   // void* out
    IntPtr lpbiInput,   // BITMAPINFOHEADER*
    IntPtr lpBits,   // void*
    IntPtr lpckid,   // DWORD* optional, out
    IntPtr lpdwFlags,   // DWORD* optional, out
    int lFrameNum,   // INT
    uint dwFrameSize,   // DWORD
    uint dwQuality,   // DWORD
    IntPtr lpbiPrev,   // BITMAPINFOHEADER* optional
    IntPtr lpPrev   // void* optional
);
<DllImport("MSVFW32.dll", ExactSpelling:=True, CallingConvention:=CallingConvention.Cdecl)>
Public Shared Function ICCompress(
    hic As IntPtr,   ' HIC
    dwFlags As UInteger,   ' DWORD
    lpbiOutput As IntPtr,   ' BITMAPINFOHEADER*
    lpData As IntPtr,   ' void* out
    lpbiInput As IntPtr,   ' BITMAPINFOHEADER*
    lpBits As IntPtr,   ' void*
    lpckid As IntPtr,   ' DWORD* optional, out
    lpdwFlags As IntPtr,   ' DWORD* optional, out
    lFrameNum As Integer,   ' INT
    dwFrameSize As UInteger,   ' DWORD
    dwQuality As UInteger,   ' DWORD
    lpbiPrev As IntPtr,   ' BITMAPINFOHEADER* optional
    lpPrev As IntPtr   ' void* optional
) As UInteger
End Function
' hic : HIC
' dwFlags : DWORD
' lpbiOutput : BITMAPINFOHEADER*
' lpData : void* out
' lpbiInput : BITMAPINFOHEADER*
' lpBits : void*
' lpckid : DWORD* optional, out
' lpdwFlags : DWORD* optional, out
' lFrameNum : INT
' dwFrameSize : DWORD
' dwQuality : DWORD
' lpbiPrev : BITMAPINFOHEADER* optional
' lpPrev : void* optional
Declare PtrSafe Function ICCompress Lib "msvfw32" ( _
    ByVal hic As LongPtr, _
    ByVal dwFlags As Long, _
    ByVal lpbiOutput As LongPtr, _
    ByVal lpData As LongPtr, _
    ByVal lpbiInput As LongPtr, _
    ByVal lpBits As LongPtr, _
    ByVal lpckid As LongPtr, _
    ByVal lpdwFlags As LongPtr, _
    ByVal lFrameNum As Long, _
    ByVal dwFrameSize As Long, _
    ByVal dwQuality As Long, _
    ByVal lpbiPrev As LongPtr, _
    ByVal lpPrev As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

ICCompress = ctypes.cdll.msvfw32.ICCompress
ICCompress.restype = wintypes.DWORD
ICCompress.argtypes = [
    wintypes.HANDLE,  # hic : HIC
    wintypes.DWORD,  # dwFlags : DWORD
    ctypes.c_void_p,  # lpbiOutput : BITMAPINFOHEADER*
    ctypes.POINTER(None),  # lpData : void* out
    ctypes.c_void_p,  # lpbiInput : BITMAPINFOHEADER*
    ctypes.POINTER(None),  # lpBits : void*
    ctypes.POINTER(wintypes.DWORD),  # lpckid : DWORD* optional, out
    ctypes.POINTER(wintypes.DWORD),  # lpdwFlags : DWORD* optional, out
    ctypes.c_int,  # lFrameNum : INT
    wintypes.DWORD,  # dwFrameSize : DWORD
    wintypes.DWORD,  # dwQuality : DWORD
    ctypes.c_void_p,  # lpbiPrev : BITMAPINFOHEADER* optional
    ctypes.POINTER(None),  # lpPrev : void* optional
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('MSVFW32.dll')
ICCompress = Fiddle::Function.new(
  lib['ICCompress'],
  [
    Fiddle::TYPE_VOIDP,  # hic : HIC
    -Fiddle::TYPE_INT,  # dwFlags : DWORD
    Fiddle::TYPE_VOIDP,  # lpbiOutput : BITMAPINFOHEADER*
    Fiddle::TYPE_VOIDP,  # lpData : void* out
    Fiddle::TYPE_VOIDP,  # lpbiInput : BITMAPINFOHEADER*
    Fiddle::TYPE_VOIDP,  # lpBits : void*
    Fiddle::TYPE_VOIDP,  # lpckid : DWORD* optional, out
    Fiddle::TYPE_VOIDP,  # lpdwFlags : DWORD* optional, out
    Fiddle::TYPE_INT,  # lFrameNum : INT
    -Fiddle::TYPE_INT,  # dwFrameSize : DWORD
    -Fiddle::TYPE_INT,  # dwQuality : DWORD
    Fiddle::TYPE_VOIDP,  # lpbiPrev : BITMAPINFOHEADER* optional
    Fiddle::TYPE_VOIDP,  # lpPrev : void* optional
  ],
  -Fiddle::TYPE_INT, Fiddle::Function::CDECL)
#[link(name = "msvfw32")]
extern "C" {
    fn ICCompress(
        hic: *mut core::ffi::c_void,  // HIC
        dwFlags: u32,  // DWORD
        lpbiOutput: *mut BITMAPINFOHEADER,  // BITMAPINFOHEADER*
        lpData: *mut (),  // void* out
        lpbiInput: *mut BITMAPINFOHEADER,  // BITMAPINFOHEADER*
        lpBits: *mut (),  // void*
        lpckid: *mut u32,  // DWORD* optional, out
        lpdwFlags: *mut u32,  // DWORD* optional, out
        lFrameNum: i32,  // INT
        dwFrameSize: u32,  // DWORD
        dwQuality: u32,  // DWORD
        lpbiPrev: *mut BITMAPINFOHEADER,  // BITMAPINFOHEADER* optional
        lpPrev: *mut ()  // void* optional
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("MSVFW32.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern uint ICCompress(IntPtr hic, uint dwFlags, IntPtr lpbiOutput, IntPtr lpData, IntPtr lpbiInput, IntPtr lpBits, IntPtr lpckid, IntPtr lpdwFlags, int lFrameNum, uint dwFrameSize, uint dwQuality, IntPtr lpbiPrev, IntPtr lpPrev);
"@
$api = Add-Type -MemberDefinition $sig -Name 'MSVFW32_ICCompress' -Namespace Win32 -PassThru
# $api::ICCompress(hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits, lpckid, lpdwFlags, lFrameNum, dwFrameSize, dwQuality, lpbiPrev, lpPrev)
#uselib "MSVFW32.dll"
#func global ICCompress "ICCompress" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; ICCompress hic, dwFlags, varptr(lpbiOutput), lpData, varptr(lpbiInput), lpBits, varptr(lpckid), varptr(lpdwFlags), lFrameNum, dwFrameSize, dwQuality, varptr(lpbiPrev), lpPrev   ; 戻り値は stat
; hic : HIC -> "sptr"
; dwFlags : DWORD -> "sptr"
; lpbiOutput : BITMAPINFOHEADER* -> "sptr"
; lpData : void* out -> "sptr"
; lpbiInput : BITMAPINFOHEADER* -> "sptr"
; lpBits : void* -> "sptr"
; lpckid : DWORD* optional, out -> "sptr"
; lpdwFlags : DWORD* optional, out -> "sptr"
; lFrameNum : INT -> "sptr"
; dwFrameSize : DWORD -> "sptr"
; dwQuality : DWORD -> "sptr"
; lpbiPrev : BITMAPINFOHEADER* optional -> "sptr"
; lpPrev : void* optional -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "MSVFW32.dll"
#cfunc global ICCompress "ICCompress" sptr, int, var, sptr, var, sptr, var, var, int, int, int, var, sptr
; res = ICCompress(hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits, lpckid, lpdwFlags, lFrameNum, dwFrameSize, dwQuality, lpbiPrev, lpPrev)
; hic : HIC -> "sptr"
; dwFlags : DWORD -> "int"
; lpbiOutput : BITMAPINFOHEADER* -> "var"
; lpData : void* out -> "sptr"
; lpbiInput : BITMAPINFOHEADER* -> "var"
; lpBits : void* -> "sptr"
; lpckid : DWORD* optional, out -> "var"
; lpdwFlags : DWORD* optional, out -> "var"
; lFrameNum : INT -> "int"
; dwFrameSize : DWORD -> "int"
; dwQuality : DWORD -> "int"
; lpbiPrev : BITMAPINFOHEADER* optional -> "var"
; lpPrev : void* optional -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD ICCompress(HIC hic, DWORD dwFlags, BITMAPINFOHEADER* lpbiOutput, void* lpData, BITMAPINFOHEADER* lpbiInput, void* lpBits, DWORD* lpckid, DWORD* lpdwFlags, INT lFrameNum, DWORD dwFrameSize, DWORD dwQuality, BITMAPINFOHEADER* lpbiPrev, void* lpPrev)
#uselib "MSVFW32.dll"
#cfunc global ICCompress "ICCompress" intptr, int, var, intptr, var, intptr, var, var, int, int, int, var, intptr
; res = ICCompress(hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits, lpckid, lpdwFlags, lFrameNum, dwFrameSize, dwQuality, lpbiPrev, lpPrev)
; hic : HIC -> "intptr"
; dwFlags : DWORD -> "int"
; lpbiOutput : BITMAPINFOHEADER* -> "var"
; lpData : void* out -> "intptr"
; lpbiInput : BITMAPINFOHEADER* -> "var"
; lpBits : void* -> "intptr"
; lpckid : DWORD* optional, out -> "var"
; lpdwFlags : DWORD* optional, out -> "var"
; lFrameNum : INT -> "int"
; dwFrameSize : DWORD -> "int"
; dwQuality : DWORD -> "int"
; lpbiPrev : BITMAPINFOHEADER* optional -> "var"
; lpPrev : void* optional -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	msvfw32 = windows.NewLazySystemDLL("MSVFW32.dll")
	procICCompress = msvfw32.NewProc("ICCompress")
)

// hic (HIC), dwFlags (DWORD), lpbiOutput (BITMAPINFOHEADER*), lpData (void* out), lpbiInput (BITMAPINFOHEADER*), lpBits (void*), lpckid (DWORD* optional, out), lpdwFlags (DWORD* optional, out), lFrameNum (INT), dwFrameSize (DWORD), dwQuality (DWORD), lpbiPrev (BITMAPINFOHEADER* optional), lpPrev (void* optional)
r1, _, err := procICCompress.Call(
	uintptr(hic),
	uintptr(dwFlags),
	uintptr(lpbiOutput),
	uintptr(lpData),
	uintptr(lpbiInput),
	uintptr(lpBits),
	uintptr(lpckid),
	uintptr(lpdwFlags),
	uintptr(lFrameNum),
	uintptr(dwFrameSize),
	uintptr(dwQuality),
	uintptr(lpbiPrev),
	uintptr(lpPrev),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function ICCompress(
  hic: THandle;   // HIC
  dwFlags: DWORD;   // DWORD
  lpbiOutput: Pointer;   // BITMAPINFOHEADER*
  lpData: Pointer;   // void* out
  lpbiInput: Pointer;   // BITMAPINFOHEADER*
  lpBits: Pointer;   // void*
  lpckid: Pointer;   // DWORD* optional, out
  lpdwFlags: Pointer;   // DWORD* optional, out
  lFrameNum: Integer;   // INT
  dwFrameSize: DWORD;   // DWORD
  dwQuality: DWORD;   // DWORD
  lpbiPrev: Pointer;   // BITMAPINFOHEADER* optional
  lpPrev: Pointer   // void* optional
): DWORD; cdecl;
  external 'MSVFW32.dll' name 'ICCompress';
result := DllCall("MSVFW32\ICCompress"
    , "Ptr", hic   ; HIC
    , "UInt", dwFlags   ; DWORD
    , "Ptr", lpbiOutput   ; BITMAPINFOHEADER*
    , "Ptr", lpData   ; void* out
    , "Ptr", lpbiInput   ; BITMAPINFOHEADER*
    , "Ptr", lpBits   ; void*
    , "Ptr", lpckid   ; DWORD* optional, out
    , "Ptr", lpdwFlags   ; DWORD* optional, out
    , "Int", lFrameNum   ; INT
    , "UInt", dwFrameSize   ; DWORD
    , "UInt", dwQuality   ; DWORD
    , "Ptr", lpbiPrev   ; BITMAPINFOHEADER* optional
    , "Ptr", lpPrev   ; void* optional
    , "Cdecl UInt")   ; return: DWORD
●ICCompress(hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits, lpckid, lpdwFlags, lFrameNum, dwFrameSize, dwQuality, lpbiPrev, lpPrev) = DLL("MSVFW32.dll", "dword ICCompress(void*, dword, void*, void*, void*, void*, void*, void*, int, dword, dword, void*, void*)")
# 呼び出し: ICCompress(hic, dwFlags, lpbiOutput, lpData, lpbiInput, lpBits, lpckid, lpdwFlags, lFrameNum, dwFrameSize, dwQuality, lpbiPrev, lpPrev)
# hic : HIC -> "void*"
# dwFlags : DWORD -> "dword"
# lpbiOutput : BITMAPINFOHEADER* -> "void*"
# lpData : void* out -> "void*"
# lpbiInput : BITMAPINFOHEADER* -> "void*"
# lpBits : void* -> "void*"
# lpckid : DWORD* optional, out -> "void*"
# lpdwFlags : DWORD* optional, out -> "void*"
# lFrameNum : INT -> "int"
# dwFrameSize : DWORD -> "dword"
# dwQuality : DWORD -> "dword"
# lpbiPrev : BITMAPINFOHEADER* optional -> "void*"
# lpPrev : void* optional -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
# ※cdecl関数。DLL()宣言はstdcall前提。cdeclは EXEC_PTR(`cdecl`,…) を使用。