12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- * Copyright 2016 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/core/SkStream.h"
- #if defined(SK_BUILD_FOR_MAC)
- #include <ApplicationServices/ApplicationServices.h>
- #elif defined(SK_BUILD_FOR_WIN)
- #include <windows.h>
- #endif
- int main(int argc, char** argv) {
- #if defined(SK_BUILD_FOR_MAC)
- CGColorSpaceRef cs = CGDisplayCopyColorSpace(CGMainDisplayID());
- CFDataRef dataRef = CGColorSpaceCopyICCProfile(cs);
- const uint8_t* data = CFDataGetBytePtr(dataRef);
- size_t size = CFDataGetLength(dataRef);
- SkFILEWStream file("monitor_0.icc");
- file.write(data, size);
- CFRelease(cs);
- CFRelease(dataRef);
- return 0;
- #elif defined(SK_BUILD_FOR_WIN)
- DISPLAY_DEVICE dd = { sizeof(DISPLAY_DEVICE) };
- SkString outputFilename;
- // Chrome's code for this currently just gets the primary monitor's profile. This code iterates
- // over all attached monitors, so it's "better" in that sense. Making intelligent use of this
- // information (via things like MonitorFromWindow or MonitorFromRect to pick the correct
- // profile for a particular window or region of a window), is an exercise left to the reader.
- for (int i = 0; EnumDisplayDevices(NULL, i, &dd, 0); ++i) {
- if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) {
- // There are other helpful things in dd at this point:
- // dd.DeviceString has a longer name for the adapter
- // dd.StateFlags indicates primary display, mirroring, etc...
- HDC dc = CreateDC(NULL, dd.DeviceName, NULL, NULL);
- if (dc) {
- char icmPath[MAX_PATH + 1];
- DWORD pathLength = MAX_PATH;
- if (GetICMProfile(dc, &pathLength, icmPath)) {
- // GetICMProfile just returns the path to the installed profile (not the data)
- outputFilename = SkStringPrintf("monitor_%d.icc", i);
- CopyFile(icmPath, outputFilename.c_str(), FALSE);
- }
- DeleteDC(dc);
- }
- }
- }
- return 0;
- #else
- SkDebugf("ERROR: Unsupported platform\n");
- return 1;
- #endif
- }
|