当前位置: 首页>>代码示例>>C++>>正文


C++ Queue::PushHead方法代码示例

本文整理汇总了C++中Queue::PushHead方法的典型用法代码示例。如果您正苦于以下问题:C++ Queue::PushHead方法的具体用法?C++ Queue::PushHead怎么用?C++ Queue::PushHead使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Queue的用法示例。


在下文中一共展示了Queue::PushHead方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: AverageBlur

		void GdiPlusAccess::AverageBlur(Gdiplus::BitmapData &data, size_t xRadius, size_t yRadius) {
			struct ColumnCache {
				List<DArr<4>> Content;
				size_t Index = 0;
			};
			Queue<ColumnCache> cache;
			List<List<DArr<4>>> result;
			for (size_t x = 0; x < data.Width; ++x) {
				for (size_t cx = (cache.Count() == 0 ? 0 : x + xRadius); cx < data.Width && cx <= x + xRadius; ++cx) {
					ColumnCache curCol;
					curCol.Index = cx;
					curCol.Content.PushBack(ColorToDArr(GetColor(data, cx, 0)) * static_cast<double>(yRadius + 1));
					for (size_t ay = 1; ay <= yRadius; ++ay) {
						curCol.Content.Last() += ColorToDArr(GetColor(data, cx, (ay >= data.Height ? data.Height - 1 : ay)));
					}
					for (size_t cy = 1; cy < data.Height; ++cy) {
						DArr<4> lpx = curCol.Content.Last();
						curCol.Content.PushBack(lpx);
						DArr<4> &curPx = curCol.Content.Last();
						curPx -= ColorToDArr(GetColor(data, cx, (cy < yRadius + 1 ? 0 : cy - yRadius - 1)));
						curPx += ColorToDArr(GetColor(data, cx, Core::Math::Min(cy + yRadius, static_cast<size_t>(data.Height) - 1)));
					}
					cache.PushHead(curCol);
				}
				while (cache.PeekTail().Index + xRadius < x) {
					cache.PopTail();
				}
				result.PushBack(List<DArr<4>>());
				List<DArr<4>> &curList = result.Last();
				for (size_t y = 0; y < data.Height; ++y) {
					curList.PushBack(DArr<4>());
					DArr<4> &curPx = curList.Last();
					cache.ForEachTailToHead([&](const ColumnCache &cc) {
						size_t repeat = 1;
						if (cc.Index == 0) {
							repeat = xRadius + 1 - x;
						} else if (cc.Index == data.Width - 1) {
							repeat = x + xRadius + 2 - data.Width;
						}
						for (size_t i = 0; i < repeat; ++i) {
							curPx += cc.Content[static_cast<size_t>(y)];
						}
						return true;
					});
				}
			}
			for (size_t x = 0; x < data.Width; ++x) {
				for (size_t y = 0; y < data.Height; ++y) {
					GetColor(data, x, y) = DArrToColor(result[x][y] / ((2 * xRadius + 1) * (2 * yRadius + 1)));
				}
			}
		}
开发者ID:lukedan,项目名称:DoodleEngine,代码行数:52,代码来源:Renderer.cpp


注:本文中的Queue::PushHead方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。