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/icmstar...)
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
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:
/* * 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; }
@ 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)
/* * 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