注册 登录
编程论坛 VFP论坛

如何理解hpdf_color 这个结构

sam_jiang 发布于 2023-10-22 17:32, 1002 次点击
这几天在研究libhpdf.dll这个pdf生成库,有个结构没法理解,麻烦论坛的大佬解答疑惑。

先看这个类定义:
#include "apdf.h"
typedef struct _HPDF_RGBColor {
    HPDF_REAL   r;
    HPDF_REAL   g;
    HPDF_REAL   b;
} HPDF_RGBColor;

这个HPDF_REAL 就是个浮点数。
typedef  float  HPDF_REAL;

void
show_description  (HPDF_Page          page,
                   HPDF_REAL          x,
                   HPDF_REAL          y,
                   const char   *text)
{
    float fsize = HPDF_Page_GetCurrentFontSize (page);
    HPDF_Font font = HPDF_Page_GetCurrentFont (page);
    HPDF_RGBColor c = HPDF_Page_GetRGBFill (page); &&这里的c是个数值

    HPDF_Page_BeginText (page);
    HPDF_Page_SetRGBFill (page, 0, 0, 0);
    HPDF_Page_SetTextRenderingMode (page, HPDF_FILL);
    HPDF_Page_SetFontAndSize (page, font, 10);
    HPDF_Page_TextOut (page, x, y - 12, text);
    HPDF_Page_EndText (page);

    HPDF_Page_SetFontAndSize (page, font, fsize);
    HPDF_Page_SetRGBFill (page, c.r, c.g, c.b); &&从这里看,这个c应该是个结构
}

我的vfp 代码:
hpdf=hpdf_new(0,0)
hpage=hpdf_addpage(hpdf)
ncolor=hpdf_page_getrgbfill(hpage) &&获得颜色值45718296,这应该是个结构吧?
我应该怎么得到这个ncolor的r,g,b值???
18 回复
#2
sam_jiang2023-10-22 17:36
HPDF_Page_GetRGBFill 函数的说明
HPDF_Page_GetRGBFill
#include "apdf.h"

typedef struct _HPDF_RGBColor {
    HPDF_REAL   r;
    HPDF_REAL   g;
    HPDF_REAL   b;
} HPDF_RGBColor;

HPDF_RGBColor
HPDF_Page_GetRGBFill  (HPDF_Page   page);

Description
HPDF_Page_GetRGBFill() returns the current value of the page's filling color. HPDF_Page_GetRGBFill() is valid only when the page's filling color space is HPDF_CS_DEVICE_RGB.

Parameter
page
The handle of a page object.

Returns
When HPDF_Page_GetRGBFill() succeed, it returns the current value of the page's filling color. Otherwise it returns {0, 0, 0}.
#3
nbwww2023-10-22 18:29
十六进制的RGB吧  加透明度
#4
sam_jiang2023-10-22 19:20
回复 3楼 nbwww
和windows不一样的颜色结构。
#5
csyx2023-10-22 20:07
三个颜色分量分别是除以 255 后的值,也就是 255 用 1.0 表示, 128 用 0.5 表示
HPDF_Page_SetRGBFill (page, 1,1,1) 是白色, HPDF_Page_SetRGBFill (page, 0,0,1) 是蓝色

1楼的 c, 我倾向于是指向结构数据的地址指针
#6
yiyanxiyin2023-10-22 21:42
45718296 这个是个地址, 保存的HPDF_RGBColor结构的数据
#7
sam_jiang2023-10-22 22:43
回复 6楼 yiyanxiyin
我试试,,,
#8
sam_jiang2023-10-23 20:14
以下是引用yiyanxiyin在2023-10-22 21:42:48的发言:

45718296 这个是个地址, 保存的HPDF_RGBColor结构的数据


如何使地址,我是不是可以用
ctemp=sys(2600,ncolor,12) &&获取这个地址的值

不过好像不对,ctemp是空的。。。

#9
csyx2023-10-23 21:23
空?chr(0) ?
如果是 12 (3*4) 个字节的 0 不一定是错误,默认的画笔颜色本来就是黑色 {0,0,0}
#10
sam_jiang2023-10-23 22:16
回复 9楼 csyx
对哦
#11
foxfans2023-10-23 22:59
可以简单增加几个内部函数方便VFP调用.
只有本站会员才能查看附件,请 登录

DECLARE integer HPDF_Page_GetRGBFill In libhpdf.dll integer
DECLARE HPDF_Page_GetRGBFill_VFP In libhpdf.dll integer npage,single @R,single @G,single @B
DECLARE HPDF_Page_GetRGBStroke_VFP In libhpdf.dll integer npage,single @R,single @G,single @B
DECLARE HPDF_Page_GetCMYKFill_VFP In libhpdf.dll integer npage,single @C,single @M,single @Y,single @K
DECLARE HPDF_Page_GetCMYKStroke_VFP In libhpdf.dll integer npage,single @C,single @M,single @Y,single @K
DECLARE HPDF_Page_GetTextMatrix_VFP In libhpdf.dll integer npage,single @A,single @B,single @C,single @D,single @X,single @Y   

前面代码略....
以这个函数为例:
HPDF_Page_SetRGBFill(npage, 1.00, 0.5334, 0.217)  
STORE 0.0000 TO r,g,b  && 0000精度
HPDF_Page_GetRGBFill_VFP(npage,@r,@g,@b)
?r,g,b


[此贴子已经被作者于2023-10-24 00:08编辑过]

#12
sam_jiang2023-10-24 02:31
回复 11楼 foxfans
这还是个输出参数啊?哈哈哈

这dll还可以自己添加函数啊

[此贴子已经被作者于2023-10-24 02:38编辑过]

#13
sych2023-10-24 10:20
回复 11楼 foxfans
谢谢!

#14
yiyanxiyin2023-10-24 10:25
以下是引用sam_jiang在2023-10-24 02:31:05的发言:

这还是个输出参数啊?哈哈哈

这dll还可以自己添加函数啊


vfp不支持结构, foxfans提供的libhpdf专门针对vfp重新封装了一些函数供vfp调用
#15
foxfans2023-10-24 10:48
根据结体长度,返回指针也可以,VFP中麻烦一点, 要sys(2600,....,结构体长度), 还要分别取值, 再ctobin(....,...),不如根据源址直接返回原值来的方便。
只有本站会员才能查看附件,请 登录



[此贴子已经被作者于2023-10-24 11:16编辑过]

#16
csyx2023-10-24 19:38
@foxfans
这么说 HPDF_Page_GetRGBFill != HPDF_Page_GetRGBFill_VFP2 了,我还以为是 2 楼函数说明中 color space != HPDF_CS_DEVICE_RGB 的原因
#17
foxfans2023-10-24 21:04
回复 16楼 csyx
对不相等。
#18
iswith2023-10-25 12:20
我觉得这样好理解些。。。。。
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2023-10-25 12:30编辑过]

#19
sam_jiang2023-10-25 20:24
回复 18楼 iswith
异曲同工,大同小异。

1