使用 ImageMagick C API 中的 MagickGetImageHistogram 方法
2017-3-29 9:26:1
收藏:0
阅读:92
评论:1
我一直在使用 ImageMagick 的 C API,使用 LuaJIT 和 FFI 库以及 magick lua 模块。现在我想使用 MagickGetImageHistogram 方法。所以,当涉及到传递参数时,请检查我的以下代码。
***image.lua***
local len = ffi.new("size_t[?]", 5)
local t = handle_result(self, lib.MagickGetImageHistogram(self.wand, len))
***lib.lua***
local ffi = require("ffi")
local lib
ffi.cdef([[ typedef void MagickWand;
typedef void PixelWand;
typedef int MagickBooleanType;
typedef int ExceptionType;
typedef int ssize_t;
typedef int CompositeOperator;
typedef int GravityType;
typedef int OrientationType;
typedef int InterlaceType;
typedef char DistortMethod[];
void MagickWandGenesis();
MagickWand* NewMagickWand();
PixelWand **MagickGetImageHistogram(MagickWand *wand, size_t *number_colors);
所以我确定我的第一个参数是正确的,但不确定第二个参数。并且它将图像直方图作为 PixelWand wands 数组返回。那么我该如何将它转换为 LuaJIT 结构?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我不确定此问题中的 lua 部分,但
MagickGetImageHistogram的期望行为如下:size_t *number_colors将被更新为数组中像素的数量。PixelGetColorCount来检索图像使用的像素总和。以下是 C 语言的快速示例。
#include <stdio.h> #include <wand/MagickWand.h> int main(int argc, const char * argv[]) { // Prototype vars MagickWand * wand; PixelWand ** histogram; size_t histogram_count = 0; // Boot environment. MagickWandGenesis(); // Allocate & read image wand = NewMagickWand(); MagickReadImage(wand, "rose:"); // Get Histogram as array of pixels histogram = MagickGetImageHistogram(wand, &histogram_count); // Iterate over each pixel & dump info. for (int i = 0; i < histogram_count; ++i) { printf("%s => %zu\n", PixelGetColorAsString(histogram[i]), PixelGetColorCount(histogram[i])); } // Clean-up histogram = DestroyPixelWands(histogram, histogram_count); wand = DestroyMagickWand(wand); MagickWandTerminus(); return 0; }此示例将输出预期文本...
// ... srgb(48,45,43) => 1 srgb(50,45,42) => 2 srgb(50,44,43) => 5 srgb(51,45,43) => 1 // ...所以我猜你的 lua 脚本可能如下...
***image.lua*** local tlen = ffi.new("size_t[1]") local t = lib.MagickGetImageHistogram(self.wand, tlen) for i=0,tlen[0] do handle_new_pixel(self, t[i], lib.PixelGetColorCount(t[i])) end