📄 ddibimagedata.h
字号:
/* //////////////////////////////////////////////////////////////////////////// INTEL CORPORATION PROPRIETARY INFORMATION// This software is supplied under the terms of a license agreement or// nondisclosure agreement with Intel Corporation and may not be copied// or disclosed except in accordance with the terms of that agreement.// Copyright(c) 2004-2005 Intel Corporation. All Rights Reserved.//////*/#ifndef __DDIBIMAGEDATA_H__#define __DDIBIMAGEDATA_H__#include "dibinfo.h"#include "image.h"template<class ByteInput, class T>void ReadDIBImageData( ByteInput &stream, const DIBInfo &dibInfo, const ImageCoreC<T,1> *channel){ switch(dibInfo.Depth()) { case Depth_24: ReadDIBImageDataDepth_24(stream, dibInfo.Origin(), dibInfo.Size(), channel[0], channel[1], channel[2]); break; default: //Depth_8 ReadDIBImageDataDepth_8 (stream, dibInfo.Origin(), dibInfo.Size(), channel[0]); break; }}template<class ByteInput, class T>void ReadDIBImageDataDepth_8( ByteInput &stream, DIBOrigin origin, const RectSize &size, const ImageCoreC<T,1> &image){ unsigned int width = size.Width(); unsigned int height = size.Height(); unsigned int dibLineStep = LineStep(Depth_8, width); T *dst; int imgLineStep; if(origin==BottomLeft) { dst = image.Line(height - 1); imgLineStep = -(int)image.LineStep(); } else { dst = image.Data(); imgLineStep = (int)image.LineStep(); } for(unsigned int y = 0; y < height; y++) { for(unsigned int x = 0; x < width; x++) { dst[x] = stream.Read8u(); } stream.Seek(dibLineStep - width); addrInc(dst, imgLineStep); }}template<class ByteInput, class T>void ReadDIBImageDataDepth_24( ByteInput &stream, DIBOrigin origin, const RectSize &size, const ImageCoreC<T,1> &r, const ImageCoreC<T,1> &g, const ImageCoreC<T,1> &b){ unsigned int width = size.Width(); unsigned int height = size.Height(); FixedBuffer<unsigned char> DIBLine(3 * width); T *rDst; T *gDst; T *bDst; int rLineStep; int gLineStep; int bLineStep; if(origin==BottomLeft) { rDst = r.Line(height - 1); gDst = g.Line(height - 1); bDst = b.Line(height - 1); rLineStep = -(int)r.LineStep(); gLineStep = -(int)g.LineStep(); bLineStep = -(int)b.LineStep(); } else { rDst = r.Data(); gDst = g.Data(); bDst = b.Data(); rLineStep = (int)r.LineStep(); gLineStep = (int)g.LineStep(); bLineStep = (int)b.LineStep(); } unsigned int dibLineStep = LineStep(Depth_24, width); for(unsigned int y = 0; y < height; y++) { stream.Read(DIBLine, 3 * width); for(unsigned int x = 0; x < width; x++) { bDst[x] = (T)DIBLine[3 * x + 0]; gDst[x] = (T)DIBLine[3 * x + 1]; rDst[x] = (T)DIBLine[3 * x + 2]; } stream.Seek(dibLineStep - width * 3); addrInc(rDst, rLineStep); addrInc(gDst, gLineStep); addrInc(bDst, bLineStep); }}#endif // __DDIBIMAGEDATA_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -