首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像结构

图像结构
EN

Stack Overflow用户
提问于 2009-06-02 13:39:14
回答 1查看 140关注 0票数 0

使用java和jna,我调用了一个函数: trace(potrace_ bitmap_s)

代码语言:javascript
复制
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地图中表示。

代码语言:javascript
复制
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 */
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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 )

在循环中这样做,图像的底部是高度值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/939602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档