123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef SKIA_EXT_SKIA_UTILS_WIN_H_
- #define SKIA_EXT_SKIA_UTILS_WIN_H_
- #include <vector>
- #include "base/win/scoped_gdi_object.h"
- #include "third_party/skia/include/core/SkBitmap.h"
- #include "third_party/skia/include/core/SkColor.h"
- #include "third_party/skia/include/core/SkImageInfo.h"
- #include "third_party/skia/include/core/SkMatrix.h"
- #include "third_party/skia/include/core/SkRefCnt.h"
- #include "build/build_config.h"
- #include <windows.h>
- struct SkIRect;
- struct SkPoint;
- struct SkRect;
- class SkSurface;
- typedef unsigned long DWORD;
- typedef DWORD COLORREF;
- typedef struct tagPOINT POINT;
- typedef struct tagRECT RECT;
- namespace skia {
- // Converts a Skia point to a Windows POINT.
- POINT SkPointToPOINT(const SkPoint& point);
- // Converts a Windows RECT to a Skia rect.
- SkRect RECTToSkRect(const RECT& rect);
- // Converts a Windows RECT to a Skia rect.
- // Both use same in-memory format. Verified by static_assert in
- // skia_utils_win.cc.
- inline const SkIRect& RECTToSkIRect(const RECT& rect) {
- return reinterpret_cast<const SkIRect&>(rect);
- }
- // Converts a Skia rect to a Windows RECT.
- // Both use same in-memory format. Verified by static_assert in
- // skia_utils_win.cc.
- inline const RECT& SkIRectToRECT(const SkIRect& rect) {
- return reinterpret_cast<const RECT&>(rect);
- }
- // Converts COLORREFs (0BGR) to the ARGB layout Skia expects.
- SK_API SkColor COLORREFToSkColor(COLORREF color);
- // Converts ARGB to COLORREFs (0BGR).
- SK_API COLORREF SkColorToCOLORREF(SkColor color);
- // Initializes the default settings and colors in a device context.
- SK_API void InitializeDC(HDC context);
- // Converts scale, skew, and translation to Windows format and sets it on the
- // HDC.
- SK_API void LoadTransformToDC(HDC dc, const SkMatrix& matrix);
- // Copies |src_rect| from source into destination.
- // Takes a potentially-slower path if |is_opaque| is false.
- // Sets |transform| on source afterwards!
- SK_API void CopyHDC(HDC source, HDC destination, int x, int y, bool is_opaque,
- const RECT& src_rect, const SkMatrix& transform);
- // Creates a surface writing to the pixels backing |context|'s bitmap.
- // Returns null on error.
- SK_API sk_sp<SkSurface> MapPlatformSurface(HDC context);
- // Creates a bitmap backed by the same pixels backing the HDC's bitmap.
- // Returns an empty bitmap on error. The HDC's bitmap is assumed to be formatted
- // as 32-bits-per-pixel XRGB8888, as created by CreateHBitmapXRGB8888().
- SK_API SkBitmap MapPlatformBitmap(HDC context);
- // Fills in a BITMAPINFOHEADER structure to hold the pixel data from |bitmap|.
- // The |bitmap| must be have a color type of kN32_SkColorType, and the header
- // will be for a bitmap with 32-bits-per-pixel RGB data (the high bits are
- // unused in each pixel).
- SK_API void CreateBitmapHeaderForN32SkBitmap(const SkBitmap& bitmap,
- BITMAPINFOHEADER* hdr);
- // Creates a globally allocated memory containing the given byte array. The
- // returned handle to the global memory is allocated by ::GlobalAlloc(), and
- // must be explicitly freed by ::GlobalFree(), unless ownership is passed to the
- // Win32 API. On failure, it returns null.
- SK_API HGLOBAL
- CreateHGlobalForByteArray(const std::vector<unsigned char>& byte_array);
- // Creates an HBITMAP backed by 32-bits-per-pixel RGB data (the high bits are
- // unused in each pixel), with dimensions and the RGBC pixel data from the
- // SkBitmap. Any alpha channel values are copied into the HBITMAP but are not
- // used. Can return a null HBITMAP on any failure to create the HBITMAP.
- SK_API base::win::ScopedBitmap CreateHBitmapFromN32SkBitmap(
- const SkBitmap& bitmap);
- // Creates an image in the DIBV5 format. On success this function returns a
- // handle to an allocated memory block containing a DIBV5 header followed by the
- // pixel data. If the bitmap creation fails, it returns null. This is preferred
- // in some cases over the HBITMAP format because it handles transparency better.
- // The returned handle to the global memory is allocated by ::GlobalAlloc(), and
- // must be explicitly freed by ::GlobalFree(), unless ownership is passed to the
- // Win32 API.
- SK_API HGLOBAL CreateDIBV5ImageDataFromN32SkBitmap(const SkBitmap& bitmap);
- // Fills in a BITMAPINFOHEADER structure given the bitmap's size. The header
- // will be for a bitmap with 32-bits-per-pixel RGB data (the high bits are
- // unused in each pixel).
- SK_API void CreateBitmapHeaderForXRGB888(int width,
- int height,
- BITMAPINFOHEADER* hdr);
- // Creates an HBITMAP backed by 32-bits-per-pixel RGB data (the high bits are
- // unused in each pixel).
- SK_API base::win::ScopedBitmap CreateHBitmapXRGB8888(
- int width,
- int height,
- HANDLE shared_section = nullptr,
- void** data = nullptr);
- } // namespace skia
- #endif // SKIA_EXT_SKIA_UTILS_WIN_H_
|