YSTest: YSLib::Drawing::HBitmap类 参考

YSTest PreAlpha_b700_20160611 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 类列表
- 类索引
- 类继承关系
- 类成员

类 | Public 类型 | Public 成员函数 | Public 属性 | Private 属性 | 所有成员列表
YSLib::Drawing::HBitmap类 参考final

位图句柄：指向位图数据。 更多...

`#include <Image.h>`

YSLib::Drawing::HBitmap 的协作图:
[图例]

## 类

class | Deleter

## Public 类型

using | DataPtr = observer_ptr<::FIBITMAP >

## Public 成员函数

| DefDeCtor (HBitmap) HBitmap(DataPtr ptr) ynothrow
| 构造：使用现有数据指针。 更多...
| HBitmap (const CompactPixmap &)

构造：从标准矩形像素图缓冲区复制并转换图像数据。

异常

  GeneralEvent | 转换失败。

更多...

| HBitmap (const ImageMemory &, ImageDecoderFlags=ImageDecoderFlags::Default)
| HBitmap (const HBitmap &, BitPerPixel)
| 构造指定图像转换为指定色深的基于 RGB 像素格式的位图副本。 更多...
| operator CompactPixmap () const
| 转换为标准矩形像素图缓冲区。 更多...
BitPerPixel | GetBPP () const ynothrow
| DefGetter (const ynothrow, DataPtr, DataPtr, make_observer(p_bitmap.get())) SDst GetHeight() const ynothrow
| DefGetter (const ynothrow, Size, Size,{GetWidth(), GetHeight()}) SDst GetPitch() const ynothrow
byte * | GetPixels () const ynothrow
| 取像素数据。 更多...
void | Rescale (const Size &, SamplingFilter=SamplingFilter::Box)
| 缩放为指定大小。 更多...
| HBitmap (const HBitmap &, const Size &, SamplingFilter)
| 构造指定图像缩放至指定大小的副本。 更多...
| HBitmap (const HBitmap &)
| DefDeMoveCtor (HBitmap) DefDeDtor(HBitmap) HBitmap &operator
| 合一赋值：使用值参数和交换函数进行复制或转移赋值。 更多...
void | SaveTo (const char *, ImageFormat=ImageFormat::BMP, ImageDecoderFlags=ImageDecoderFlags::Default) const
| \ brief 保存：使用指定 UTF-8 文件名、格式和解码器标识。 更多...
void | SaveTo (const char16_t *, ImageFormat=ImageFormat::BMP, ImageDecoderFlags=ImageDecoderFlags::Default) const
| \ brief 保存：使用指定 UTF-16 文件名、格式和解码器标识。 更多...
template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >
void | SaveTo (const _tString &filename, ImageFormat fmt=ImageFormat::BMP, ImageDecoderFlags flags=ImageDecoderFlags::Default) const
| 保存：使用指定字符串文件名、格式和解码器标识。 更多...

## Public 属性

PDefH(byte *, GetScanLine, size_t idx) const ynothrow ImplRet(p_bitmap?(*this) | Release [idx] Deleter::pointer() ynothrow
| 取扫描线数据。 更多...

## Private 属性

unique_ptr_from< Deleter > | p_bitmap

## 相关函数

(请注意: 这些不是成员函数.)
using | HImageMetadataIterator = ystdex::indirect_input_iterator< HImageMetadata * >
| 元数据迭代器。 更多...
YF_API Timers::TimeSpan | GetFrameTimeOf (const HBitmap &)
| 取图像延时。 更多...
YF_API Size | GetLogicalSizeOf (const HBitmap &)
| 取图像逻辑大小。 更多...
#define | DefSwap(_q, _t)
| 多页面位图数据。 更多...
const Size | size_t = 0)
| HBitmap (const Size &, BitPerPixel=0)

异常

  LoggedEvent | 异常中立：输入的大小分量过大。

更多...

| YB_NONNULL (2) HBitmap(BitmapPtr
| 构造：从矩形像素图缓冲区按指定大小和扫描线跨距增量复制并转换图像数据。 更多...
| ImageDecoderFlags = ImageDecoderFlags::Default)
| ImageFormat
| YB_NONNULL (2) HBitmap(const char *
| 构造：使用指定 UTF-8 文件名和解码器标识。 更多...
| YB_NONNULL (2) HBitmap(const char *
| 构造：使用指定 UTF-8 文件名、指定格式和解码器标识。 更多...
| YB_NONNULL (2) HBitmap(const char16_t *
| 构造：使用指定 UCS-2 文件名和解码器标识。 更多...
| YB_NONNULL (2) HBitmap(const char16_t *
| 构造：使用指定 UCS-2 文件名、指定格式和解码器标识。 更多...
template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >
| HBitmap (const _tString &filename, ImageDecoderFlags=ImageDecoderFlags::Default)
| 构造：使用指定字符串文件名和解码器标识。 更多...
template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >
| HBitmap (const _tString &filename, ImageFormat fmt, ImageDecoderFlags=ImageDecoderFlags::Default)
| 构造：使用指定字符串文件名和解码器标识。 更多...

## 详细描述

位图句柄：指向位图数据。

注解
  内部数据的平凡容器：深复制且可转移。

自从
  build 418

在文件 Image.h 第 298 行定义.

## 成员类型定义说明

using YSLib::Drawing::HBitmap::DataPtr = observer_ptr<::FIBITMAP>

在文件 Image.h 第 301 行定义.

## 构造及析构函数说明

YSLib::Drawing::HBitmap::HBitmap | ( | const Size & | s,
|  | BitPerPixel | bpp = `0`
| ) |  |

异常

  LoggedEvent | 异常中立：输入的大小分量过大。

异常

  BadImageAlloc | 存储分配失败。

在文件 Image.cpp 第 287 行定义.

参考 p_bitmap.

参考自 Rescale().

这是这个函数的调用关系图:

YSLib::Drawing::HBitmap::HBitmap | ( | const CompactPixmap & | buf | ) |

构造：从标准矩形像素图缓冲区复制并转换图像数据。

异常

  GeneralEvent | 转换失败。

自从
  build 471

在文件 Image.cpp 第 305 行定义.

template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >

YSLib::Drawing::HBitmap::HBitmap | ( | const _tString & | filename,
|  | ImageDecoderFlags | = `ImageDecoderFlags::Default`
| ) |  |

inline

构造：使用指定字符串文件名和解码器标识。

异常

  UnknownImageFormat | 未知图像格式。

自从
  build 483

在文件 Image.h 第 386 行定义.

template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >

YSLib::Drawing::HBitmap::HBitmap | ( | const _tString & | filename,
|  | ImageFormat | fmt,
|  | ImageDecoderFlags | = `ImageDecoderFlags::Default`
| ) |  |

inline

构造：使用指定字符串文件名和解码器标识。

自从
  build 483

在文件 Image.h 第 396 行定义.

YSLib::Drawing::HBitmap::HBitmap | ( | const ImageMemory & | mem,
|  | ImageDecoderFlags | flags = `ImageDecoderFlags::Default`
| ) |  |

异常

  GeneralEvent | 读取失败。

自从
  build 457

在文件 Image.cpp 第 321 行定义.

参考 p_bitmap.

YSLib::Drawing::HBitmap::HBitmap | ( | const HBitmap & | pixmap,
|  | BitPerPixel | bpp
| ) |  |

构造指定图像转换为指定色深的基于 RGB 像素格式的位图副本。

异常

  UnsupportedImageFormat | 指定的色深对指定图形不被支持。
  GeneralEvent | 转换失败（包括色深被支持但具体格式不被实现支持的情形）。

注解
  对 16 位位图使用 RGB555 。对 32 位位图使用 RGBA8888 。

自从
  build 471

在文件 Image.cpp 第 328 行定义.

YSLib::Drawing::HBitmap::HBitmap | ( | const HBitmap & | pixmap,
|  | const Size & | s,
|  | SamplingFilter | sf
| ) |  |

构造指定图像缩放至指定大小的副本。

自从
  build 417

异常

  GeneralEvent | 缩放失败。

自从
  build 430

在文件 Image.cpp 第 350 行定义.

参考 p_bitmap.

YSLib::Drawing::HBitmap::HBitmap | ( | const HBitmap & | pixmap | ) |

异常

  BadImageAlloc | 存储分配失败。

在文件 Image.cpp 第 358 行定义.

参考 p_bitmap.

## 成员函数说明

YSLib::Drawing::HBitmap::DefDeCtor | ( | HBitmap |  | ) |

inline

构造：使用现有数据指针。

后置条件
  `!*this` 。

自从
  build 556

注解
  取得所有权。

自从
  build 556

在文件 Image.h 第 321 行定义.

YSLib::Drawing::HBitmap::DefDeMoveCtor | ( | HBitmap |  | ) |

合一赋值：使用值参数和交换函数进行复制或转移赋值。

自从
  build 461
  build 430

YSLib::Drawing::HBitmap::DefGetter | ( | const ynothrow | ,
|  | DataPtr | ,
|  | DataPtr | ,
|  | make_observer(p_bitmap.get()) |
| ) |  | const

自从
  build 417

YSLib::Drawing::HBitmap::DefGetter | ( | const ynothrow | ,
|  | Size | ,
|  | Size | ,
|  | {GetWidth(), GetHeight()} |
| ) |  | const

自从
  build 417
  build 417

BitPerPixel YSLib::Drawing::HBitmap::GetBPP | ( |  | ) | const

在文件 Image.cpp 第 386 行定义.

参考 p_bitmap.

byte * YSLib::Drawing::HBitmap::GetPixels | ( |  | ) | const

取像素数据。

返回
  若数据指针为空则为空指针，否则为像素数据起始非空指针。

注解
  像素数据由连续的扫面线数据构成，数量等于高度值。

自从
  build 471

在文件 Image.cpp 第 401 行定义.

参考 p_bitmap.

YSLib::Drawing::HBitmap::operator CompactPixmap | ( |  | ) | const

转换为标准矩形像素图缓冲区。

自从
  build 471

在文件 Image.cpp 第 373 行定义.

参考 ystdex::make_unique_default_init(), CHRLib::s , 以及 YSLib::Drawing::Size::Width.

函数调用图:

void YSLib::Drawing::HBitmap::Rescale | ( | const Size & | s,
|  | SamplingFilter | sf = `SamplingFilter::Box`
| ) |  |

缩放为指定大小。

自从
  build 430

在文件 Image.cpp 第 418 行定义.

参考 HBitmap().

函数调用图:

void YSLib::Drawing::HBitmap::SaveTo | ( | const char * | filename,
|  | ImageFormat | fmt = `ImageFormat::BMP`,
|  | ImageDecoderFlags | flags = `ImageDecoderFlags::Default`
| ) |  | const

\ brief 保存：使用指定 UTF-8 文件名、格式和解码器标识。

异常

  std::invalid_argument | 不存在可被保存的位图数据。
  GeneralEvent | 保存失败。

自从
  build 556

在文件 Image.cpp 第 424 行定义.

void YSLib::Drawing::HBitmap::SaveTo | ( | const char16_t * | filename,
|  | ImageFormat | fmt = `ImageFormat::BMP`,
|  | ImageDecoderFlags | flags = `ImageDecoderFlags::Default`
| ) |  | const

\ brief 保存：使用指定 UTF-16 文件名、格式和解码器标识。

在文件 Image.cpp 第 430 行定义.

template<class _tString , yimpl(typename=ystdex::enable_for_string_class_t< _tString >) >

void YSLib::Drawing::HBitmap::SaveTo | ( | const _tString & | filename,
|  | ImageFormat | fmt = `ImageFormat::BMP`,
|  | ImageDecoderFlags | flags = `ImageDecoderFlags::Default`
| ) |  | const

inline

保存：使用指定字符串文件名、格式和解码器标识。

自从
  build 483

在文件 Image.h 第 527 行定义.

YSLib::Drawing::HBitmap::YB_NONNULL | ( | 2 |  | ) |

explicit

构造：从矩形像素图缓冲区按指定大小和扫描线跨距增量复制并转换图像数据。

前置条件
  间接断言：指针参数非空。

异常

  GeneralEvent | 转换失败。
  LoggedEvent | 异常中立：由跨距计算的偏移值范围检查失败。

注解
  扫描线跨距的单位为字节， 等于图像的宽乘以每像素字节数与输入的扫描线跨距增量之和。

自从
  build 471

YSLib::Drawing::HBitmap::YB_NONNULL | ( | 2 |  | ) | const

构造：使用指定 UTF-8 文件名和解码器标识。

前置条件
  间接断言：路径参数非空。

异常

  std::invalid_argument | 文件打开失败。
  GeneralEvent | 读取失败。

自从
  build 556

异常

  UnknownImageFormat | 未知图像格式。

YSLib::Drawing::HBitmap::YB_NONNULL | ( | 2 |  | ) | const

构造：使用指定 UTF-8 文件名、指定格式和解码器标识。

YSLib::Drawing::HBitmap::YB_NONNULL | ( | 2 |  | ) | const

构造：使用指定 UCS-2 文件名和解码器标识。

异常

  UnknownImageFormat | 未知图像格式。

YSLib::Drawing::HBitmap::YB_NONNULL | ( | 2 |  | ) | const

构造：使用指定 UCS-2 文件名、指定格式和解码器标识。

## 友元及相关函数文档

#define DefSwap | ( |  | _q,
|  |  | _t
| ) |  |

related

值:
PDefH(void, swap, _t& _x, _t& _y) _q \
ImplExpr(_x.swap(_y))

多页面位图数据。

自从
  build 430
  build 456

注解
  非公开实现。

YF_API Timers::TimeSpan GetFrameTimeOf | ( | const HBitmap & |  | ) |

related

取图像延时。

返回
  CheckNonnegativeScalar 检查后的元数据指定的被显示为帧的图像的时间间隔。

异常

  GeneralEvent | 指定数据不存在。
  LoggedEvent | 数据小于 0 。

自从
  build 584

在文件 Image.cpp 第 437 行定义.

YF_API Size GetLogicalSizeOf | ( | const HBitmap & |  | ) |

related

取图像逻辑大小。

返回
  CheckPositiveScalar 检查后的元数据指定分量的大小，保证分量大于 0 。

异常

  GenerlError | 元数据读取失败或不完整。
  LoggedEvent | 大小分量溢出。

注解
  当前只支持 ImageMetadataModel::Animation 模型。

自从
  build 557

在文件 Image.cpp 第 445 行定义.

using HImageMetadataIterator = ystdex::indirect_input_iterator<HImageMetadata*>

related

元数据迭代器。

自从
  build 557

在文件 Image.h 第 934 行定义.

## 类成员变量说明

YSLib::Drawing::HBitmap::ImageDecoderFlags = ImageDecoderFlags::Default)

在文件 Image.h 第 364 行定义.

YSLib::Drawing::HBitmap::ImageFormat

在文件 Image.h 第 367 行定义.

unique_ptr_from<Deleter> YSLib::Drawing::HBitmap::p_bitmap

private

自从
  build 671

在文件 Image.h 第 314 行定义.

参考自 GetBPP(), GetPixels() , 以及 HBitmap().

HBitmap::Deleter::pointer YSLib::Drawing::HBitmap::Release

取扫描线数据。

前置条件
  间接断言：参数值小于高。

返回
  若数据指针为空则为空指针，否则为扫描线数据起始非空指针。

注解
  使用 `operator`[] 实现。

参见
  operator[]

自从
  build 471

释放所有权。

后置条件
  `!*this`

自从
  build 671

在文件 Image.h 第 497 行定义.

const Size YSLib::Drawing::HBitmap::size_t = 0)

在文件 Image.h 第 344 行定义.

该类的文档由以下文件生成:

- Image.h
- Image.cpp