使用java和jna我调用fonction:trace(potrace_ bitmap_s)
struct potrace_bitmap_s {
int w, h;
int dy; /* scanline offset in words */
potrace_word *map; /* pixel data, dy*h words */
};
typedef struct potrace_bitmap_s potrace_bitmap_t;
w,h:是位图的宽度和高度
在图书馆的文档中发现了这个
这里,potrace_word是无符号的 potracelib.h中定义的整数类型。 它通常等于原生 机器字(即32位) 32位架构)。在下面的 解释,我们假设类型 potrace_word持有N位。
维度w * h的位图是 分为,从下到上,分为h 水平扫描线。每条扫描线都是 从左到右分成块 N个像素。每个这样的N个像素块 存储为单个potrace_word, 与块的最左边的像素 对应最重要的 一点一点,最右边 块的像素对应于 这个词中最不重要的一点。 “开启”(或“黑色”或“黑色”的像素 “前景”)由位表示 价值1.“关闭”的像素 “白色”或“背景”)是 由位值0表示。如果 扫描线中的位数不是 可以被N整除,然后是最右边的 扫描线的单词填充在 正确的零。的数据 扫描线0(最底部的扫描线) 从map [0]开始。的数据 扫描线1从地图[dy]开始。数据 扫描线2开始于地图[2 * dy], 等等。请注意,dy可以 取决于正面还是负面 关于应用程序如何打算 将内存中的图像数据输出。
但我不明白我如何在java地图中代表。
public class Potrace_bitmap_t extends Structure{
int w, h; /* width and height, in pixels */
int dy; /* scanline offset in words */
map ??; /* pixel data, dy*h words */
}
答案 0 :(得分:1)
这是存储2色图像的一种非常标准的方式,就像您从传真编码的tiff中获得的那样。 “map”应该是无符号32位整数数组。我不认为Java允许你声明uint32,但在这种情况下它并不重要,因为你所关心的只是位。
将“Map”声明为整数数组。要将其转换为图像,您可以一次检查一个数组中的位。如果数组中第一个int的第0位(我假设是Intel机器)为“1”,则图像左下角的像素应设置为黑色。如果为“0”,则将该像素设置为白色。每个int将给你32个像素。如果图像的宽度不能被32整除,则需要向前跳过。这就是“map [2 * dy]”告诉你的内容。
因此,如果图像宽度为55,例如,您使用map [0]设置32像素,然后使用map [1]设置23像素,然后从图像的下一行开始(底部旁边的那一行) )在地图的第一位[2]。 (dy表示55像素宽的图像为2,假设32位整数)
在循环中执行此操作,将图像底部设置为高度值。