使用java和jna,我调用了一个函数: 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,其中块的最左边像素对应于单词的最重要位,而块的最右边像素对应于单词的最小有效位。“on”(或“黑色”或“前台”)的像素由位值1表示,“off”(“白色”或“背景”)用位值0表示。如果scanline中的位数不能被N整除,那么scanline的最右边的单词就用零填充在右边。scanline 0(最底层的扫描线)的数据从map开始。scanline 1的数据从mapdy开始。scanline 2的数据从map2*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 */
}发布于 2009-06-02 14:36:23
这是一种非常标准的存储2色图像的方法,就像从传真编码的tiff中得到的一样。"map“应该是由无符号32位整数组成的数组。我不认为Java允许您声明uint32,但在这种情况下并不重要,因为您只关心这些位数。
将"Map“声明为整数数组。要将其转换为图像,您可以一次只检查数组中的位。如果数组中第一个int的位0(我假设是Intel机器)是"1",那么图像左下角的像素应该设置为黑色。如果是"0",则将该像素设置为白色。每个int会给你32个像素。如果图像的宽度不能被32整除,则需要跳过前面。这就是“地图2*dy”告诉你的。
因此,例如,如果图像宽度为55,则使用map设置32个像素,然后用map1设置23个像素,然后在map2的第一位开始设置图像的下一行(位于底部的一行)。(假设32位整数,55像素宽的图像的dy为2 )
在循环中这样做,图像的底部是高度值。
https://stackoverflow.com/questions/939602
复制相似问题