Render函数

来源:互联网 发布:dz资源论坛源码 编辑:程序博客网 时间:2024/04/29 16:49

MSDN中是这样写的

Ipicture Render(
  HDC hdc, //Handle of device context on which to render the image
  long x,  //Horizontal position of image in hdc
  long y,  //Vertical position of image in hdc
  long cx, //Horizontal dimension of destination rectangle
  long cy, //Vertical dimension of destination rectangle
  OLE_XPOS_HIMETRIC xSrc,
           //Horizontal offset in source picture
  OLE_YPOS_HIMETRIC ySrc,
           //Vertical offset in source picture
  OLE_XSIZE_HIMETRIC cxSrc,
           //Amount to copy horizontally in source picture
  OLE_YSIZE_HIMETRIC cySrc,
           //Amount to copy vertically in source picture
  LPCRECT prcWBounds
           //Pointer to position of destination for a metafile hdc
);

看似解释的很清楚,但是有很多地方带有迷惑性,跟实际情况,跟人们想象的不同。我就是这样,研究了半天才弄明白。

hdc 是设备环境句柄,

x、y是图片在设备中显示的坐标,

cx、cy是要显示图片的矩形的长度和宽度,注意,用IPicture::get_Width和IPicture::get_Height的得到的数据并不适用于此处,而是要除以26.45,这四个参数都是表示像素的,不一定是除以26.45,根据各人电脑屏幕分辨率的不同而设定的,主要是用来将himetric类型转换成像素,1 himetric = 0.01mm

xSrc,ySrc分别是在源图像上的水平偏移和在源图像上的垂直偏移;从(xSrc,ySrc)处开始读取数据显示形成图片,最后将图片放到指定设备区域中。

cxSrc是在源图像上水平拷贝的数量,cySrc是在源图像上垂直拷贝的数量;

prcWBounds是指向目标图元设备环境句柄的指针,一般为NULL。

为什么用render函数的时候都是Render(hdc,  xPos,  yPos,  width,    height,0,  srcHeight,srcWidth,-srcHeight);

这是一个问题..........

原因是这样的:这个和位图的格式有关,位图文件中最开始的像素数据不是图像左上角这个像素,而是图像中最后一行最左边像素点的数据。图片显示时和图片的存储格式是相反的,所以位图文件中最开始的像素数据不是左上角的那个像素。
所以左顶点是(0,hmHeight)
hmWidth表示宽度
-hmHeight是负数,表示从最后一行读取,并显示在第一行。

eg:0,  srcHeight,srcWidth,-srcHeight:最后图片显示是正常的,但如果改成0, 0,srcWidth,srcHeight);那么最后图片会显示成倒的。

原创粉丝点击