Notes on implementing mscms.dll - for anybody who's interested in
digital colour management
Mike McCormack
mike at codeweavers.com
Wed Jan 7 03:34:33 CST 2004
Hi,
For whoever is interested in running Phase One's Capture One software
(http://www.phaseone.com/) on Wine, you'll need mscms.dll for Colour
Management.
Unfortunately Wine has no implementation of it yet. I had a quick look
into what is needed to implement mscms.dll
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/icm/icmstart_5i91.asp)
It appears the functionality of mscms.dll is mostly defined by the
International Color consortium (http://www.color.org), and a free
implementation exists(http://www.littlecms.com/, and is available as a
(shared?) library on many distros.
I think it's feasable to interface that library to an mscms.dll
implemented in Wine. I've created a stub library incase anybody wants
to have a go at it... mail me if you're interested in working on it.
Mike
-------------- next part --------------
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = mscms.dll
IMPORTS = user32 advapi32 kernel32 ntdll
EXTRALIBS = $(LIBUNICODE) $(LIBUUID)
EXTRADEFS = -DCOM_NO_WINDOWS_H
C_SRCS = \
mscms.c
@MAKE_DLL_RULES@
### Dependencies:
-------------- next part --------------
/*
* Copyright (C) 2004 Mike McCormack for Codeweavers
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "icm.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(mscms);
BOOL WINAPI SetColorProfileElementSize( HPROFILE hProfile, TAGTYPE tag,
DWORD cbSize)
{
FIXME("%p %08lx %ld\n", hProfile, tag, cbSize);
return TRUE;
}
BOOL WINAPI GetColorProfileElement( HPROFILE hProfile, TAGTYPE tag,
DWORD dwOffset, DWORD *pcbSize, PVOID pBuffer, PBOOL pbReference)
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI GetCountColorProfileElements( HPROFILE hProfile, PDWORD pnCount)
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI SetColorProfileElement( HPROFILE hProfile, TAGTYPE tag,
DWORD dwOffset, PDWORD pcbSize, PVOID pBuffer)
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI DeleteColorTransform( HTRANSFORM hColorTransform )
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI CloseColorProfile( HPROFILE hProfile )
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI GetColorDirectoryA( LPCSTR pMachineName, LPSTR pBuffer,
PDWORD pdwSize )
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI TranslateBitmapBits( HTRANSFORM hColorTransform, PVOID pSrcBits,
BMFORMAT bmInput, DWORD dwWidth, DWORD dwHeight, DWORD dwInputStride,
PVOID pDestBits, BMFORMAT bmOutput, DWORD dwOutputStride,
PBMCALLBACKFN pfnCallback, ULONG ulCallbackData)
{
FIXME("\n");
return TRUE;
}
HTRANSFORM WINAPI CreateMultiProfileTransform( PHPROFILE pahProfiles,
DWORD nProfiles, DWORD *padwIntent, DWORD nIntents, DWORD dwFlags,
DWORD indexPreferredCMM )
{
FIXME("\n");
return NULL;
}
HPROFILE WINAPI OpenColorProfileA( PPROFILE pProfile, DWORD dwDesiredAccess,
DWORD dwShareMode, DWORD dwCreationMode)
{
FIXME("\n");
return NULL;
}
BOOL WINAPI GetColorProfileElementTag( HPROFILE hProfile, DWORD dwIndex,
PTAGTYPE pTag )
{
FIXME("\n");
return TRUE;
}
BOOL WINAPI GetColorProfileHeader( HPROFILE hProfile, PPROFILEHEADER pHeader )
{
FIXME("\n");
return TRUE;
}
-------------- next part --------------
@ stdcall SetColorProfileElementSize(ptr long long)
@ stdcall GetCountColorProfileElements(ptr ptr)
@ stdcall SetColorProfileElement(ptr ptr long ptr ptr)
@ stdcall GetColorProfileElement(ptr ptr long ptr ptr ptr)
@ stdcall DeleteColorTransform(ptr)
@ stdcall CloseColorProfile(ptr)
@ stdcall GetColorDirectoryA(str ptr ptr)
@ stdcall TranslateBitmapBits(ptr ptr ptr long long long ptr ptr long ptr long)
@ stdcall CreateMultiProfileTransform(ptr long ptr long long long)
@ stdcall OpenColorProfileA(ptr long long long)
@ stdcall GetColorProfileElementTag()
@ stdcall GetColorProfileHeader(ptr ptr)
-------------- next part --------------
/*
* Copyright (C) the Wine project
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __WINE_ICM_H
#define __WINE_ICM_H
typedef HANDLE HPROFILE;
typedef HPROFILE *PHPROFILE;
typedef HANDLE HTRANSFORM;
typedef DWORD TAGTYPE;
typedef TAGTYPE *PTAGTYPE,*LPTAGTYPE;
typedef enum {
BM_x555RGB = 0x00,
BM_565RGB = 0x01,
BM_RGBTRIPLETS = 0x02,
BM_BGRTRIPLETS = 0x04,
BM_xRGBQUADS = 0x08,
BM_10b_RGB = 0x09,
BM_16b_RGB = 0x0a,
BM_xBGRQUADS = 0x10,
BM_CMYKQUADS = 0x20,
BM_x555XYZ = 0x101,
BM_x555Yxz,
BM_x555Lab,
BM_x555G3CH,
BM_XYZTRIPLETS = 0x201,
BM_YxyTRIPLETS,
BM_LabTRIPLETS,
BM_G3CHTRIPLETS,
BM_5CHANNEL,
BM_6CHANNEL,
BM_7CHANNEL,
BM_8CHANNEL,
BM_GRAY,
BM_xXYZQUADS = 0x301,
BM_xYxyQUADS,
BM_xLabQUADS,
BM_xG3CHQUADS,
BM_KYMCQUADS,
BM_10b_XYZ = 0x401,
BM_10b_Yxy,
BM_10b_Lab,
BM_10b_G3CH,
BM_NAMED_INDEX,
BM_16b_XYZ = 0x501,
BM_16b_Yxy,
BM_16b_Lab,
BM_16b_G3CH,
BM_16b_GRAY,
} BMFORMAT;
typedef BOOL WINAPI (*PBMCALLBACKFN)(ULONG,ULONG,ULONG);
typedef PBMCALLBACKFN LPPBMCALLBACKFN;
typedef struct tagPROFILEHEADER {
DWORD phSize;
DWORD phCMMType;
DWORD phVersion;
DWORD phClass;
DWORD phDataColorSpace;
DWORD phConnectionSpace;
DWORD phDateTime[3];
DWORD phSignature;
DWORD phPlatform;
DWORD phProfileFlags;
DWORD phManufacturer;
DWORD phModel;
DWORD phAttributes;
DWORD phRenderingIntent;
CIEXYZ phIlluminant;
DWORD phCreator;
BYTE phReserved[44];
} PROFILEHEADER;
typedef PROFILEHEADER *PPROFILEHEADER,*LPPROFILEHEADER;
typedef struct tagPROFILE {
DWORD dwType;
PVOID pProfileData;
DWORD cbDataSize;
} PROFILE;
typedef PROFILE *PPROFILE,*LPPROFILE;
#endif
More information about the wine-devel
mailing list