图像结构

时间:2009-06-02 13:39:14

标签: dll jna

使用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 */
}

1 个答案:

答案 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位整数)

在循环中执行此操作,将图像底部设置为高度值。