代码之家  ›  专栏  ›  技术社区  ›  ryan

图像结构

  •  0
  • ryan  · 技术社区  · 17 年前

    使用Java和JNA调用FuncTe:Tracle(PoTraceE.BITMAPIs)

    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:是位图的宽度和高度。

    在图书馆的医生A找到这个

    这里,potrace_字是未签名的 potracelib.h中定义的整数类型。 它通常等于一个本地人 机器字(即32位 32位体系结构)。在下面 解释,我们假设 potrace_字有n个位。

    尺寸为w*h的位图是 从下到上分为H 水平扫描线。每条扫描线 从左到右分为若干块 n个像素。每个这样的n个像素块 存储为单个potrace_字, 最左边的像素 对应最重要的 一点点,最右边 对应于的块的像素 字的最低有效位。 __on_(或__black_或 _前景_)由位表示 值1。__off_(共个)像素 _156;white_157; or__background_157;)are 以位值0表示。如果 扫描线中的位数不是 可被n整除,然后是最右边的 扫描线的字被填充在 右边是零。数据供 扫描线0(最下面的扫描线) 从映射[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 回复  |  直到 17 年前
        1
  •  1
  •   R Ubben    17 年前

    这是一种非常标准的存储2色图像的方法,就像从传真编码的TIFF中获得的一样。“map”应该是一个无符号32位整数数组。我不认为Java允许你声明UIT32,但是在这种情况下它并不重要,因为你只关心比特。

    将“map”声明为整数数组。要使其成为图像,可以一次检查一个数组中的位。如果数组中第一个int的位0(假设是英特尔机器)是“1”,则图像左下角的像素应设置为黑色。如果是“0”,则将该像素设置为白色。每个int将为您提供32像素。如果图像的宽度不能被32整除,则需要向前跳。这就是“地图[2*dy]告诉你的。

    例如,如果图像宽度为55,则使用map[0]设置32个像素,然后使用map[1]设置23个像素,然后在map[2]的第一位从图像的下一行(底部的下一行)开始。(对于图像,55像素宽的dy为2,假设为32位整数)

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