问题标签 [bitmap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
897 浏览

actionscript-3 - Papervision 渲染到位图

有谁知道使用 Papervision 渲染器将 3D 场景渲染到位图的方法?我想对我的场景进行定格,当我在背景中更改场景时可以显示它。

0 投票
3 回答
7042 浏览

flash - Flash/ActionScript:将显示对象“绘制”到另一个“上”

如何在 ActionScript 中正确地将一个矢量对象绘制到另一个矢量对象的特定位置,并考虑定位、透明度等?

我的想法(如这里所建议的那样)是使用beginBitmapFill() 和() 将一个 MovieClipdrawRect的位图副本(使用() 制作)绘制到 . 另一个 MovieClip 的属性,但事实证明这比我想象的要困难,主要是因为以下原因:BitmapData.drawgraphics

  1. 不保留透明度:源影片剪辑是透明的,目标图形变为白色。我试过使用 a BlendMode,但它没有帮助。似乎白色像素实际上被复制到 BitmapData 中。我一定错过了什么,但我不知道是什么。似乎问题在于BitmapData构造函数的文档是错误的:透明度不默认为true,而是false。所以如果你创建的new BitmapData(x, y, true)透明度是保留的,否则不会。

  2. 定位。如果源影片剪辑居中(中心位于 (0, 0),则在将其复制到 BitmapData 时必须应用矩阵来移动它,否则位图将仅包含源影片剪辑的右下角。弄清楚如何移动它很棘手,我认为它涉及以某种方式获取边界。(如果源对象在其画布中完全居中,您可以简单地将其偏移其宽度和高度的一半,当然。)

  3. beginBitmapFill平铺。似乎如果您不在drawRect(0, 0) 处开始 (),则位图填充也不会从位图中的 (0, 0) 开始。这意味着您必须根据要开始绘制的位置再次移动源位图。

(然后还有其他东西,比如必须 lineStyle(0,0,0) 所以 drawRect() 不画边框等)

所有这些棘手的麻烦让我相信我正在以错误的方式解决这个问题。有没有更简单的方法来做到这一点?有没有图书馆可以帮助我?有没有人成功做到这一点?也许我的绘图画布不应该是 Sprite 而是 Bitmap?但是后来我不知道如何使用lineTo() 等来绘制它。

情况如下:我有一个 Sprite,我使用它的 .graphics、lineTo() 等绘制它。现在我想在绘制时使用一个 MovieClip 作为画笔(或者只是将另一个 MovieClip 的副本放在绘图表面上),使另一个 MovieClip 成为第一个的图形的一部分。我不能addChild() 因为那样矢量图形不会与绘制的图形交互。


编辑Theo提供了一个完美的工作解决方案,除了它不应用应用于被绘制到图形表面上的 DisplayObject的旋转和缩放。这是Theo 的解决方案

为了支持旋转和缩放,我假设必须修改以下内容:

  1. 使用Matrixdraw()应该从源复制缩放和旋转DisplayObject
  2. Matrix使用的 in也beginBitmapFill()应该复制这个缩放和旋转?或者这可能会产生“双重”缩放和旋转?
  3. drawRect()应该修改坐标以匹配缩放和旋转的大小DisplayObject?哪种方式getBounds()不准确?

编辑:这是一个支持缩放和旋转的工作实现,由所有反馈制成:


有点相关但不那么热门的问题:如何在 Flex 3 中的图形上放置图像(例如 PNG)?

0 投票
2 回答
7142 浏览

iphone - 如何从 iPhone 上的 BitmapContext 中提取 ARGB 组件?

我正在尝试使用以下代码从 CGBitmapContext 获取 ARGB 组件:

}

当我尝试存储红/绿/蓝时,结果总是 240。而 alpha 总是 255。

所以我认为指针可能有问题。它无法返回我想要的正确 ARGB 数据。关于代码有什么问题的任何想法?

0 投票
1 回答
226 浏览

iphone - 如何读取 CGBitmapContextData?(在 iPhone 上)

我正在努力从图像中获取 ARGB 等位图数据。

一种)。我为图像创建了一个位图上下文:

乙)。我将图像绘制到上下文中:

C)。然后我从位图上下文中获取数据:

d)。无效...不可读?

我发现它只返回一个指向图像上下文数据的 void 指针,这意味着无法获取上下文的数据(只写)。还有其他方法可以从上下文数据中返回值吗?

PS:如果我创建一个无符号字符指针 * 数据,它将为 RGB 返回 240,为 alpha 返回 255,这不是正确的颜色分量。

0 投票
7 回答
13529 浏览

c# - 如何在 .NET 中使用大位图?

我正在尝试编写一个轻量级的图像查看应用程序。但是,.NET 存在系统内存限制。

尝试加载大型位图(9000 x 9000 像素或更大,24 位)时,我收到 System.OutOfMemoryException。这是在具有 2GB RAM(其中 1.3GB 已用完)的 Windows 2000 PC 上。尝试加载文件也需要很多时间。

以下代码生成此错误:

与此代码一样:

此外,这样做就足够了:

后一个代码旨在与 GDI 一起使用。在研究这一点时,我发现这实际上是一个内存问题,其中 .NET 尝试在单个连续内存块中分配两倍于所需的内存。

http://bytes.com/groups/net-c/279493-drawing-large-bitmaps

我从其他应用程序(Internet Explorer、MS Paint 等)中知道可以打开大图像,而且速度相当快。我的问题是,如何在 .NET 中使用大型位图?

无论如何要流式传输它们,还是非内存加载它们?

0 投票
1 回答
1533 浏览

.net - 如何从 RGB 初始化 48bpp 位图?

我正在用托管 C++ 编写一个解释器,用于 PPM 图像格式等。图像规范允许每个通道每像素最多两个字节的图像,或每像素 48 位彩色图像。我正在尝试读取这种格式并将其转换为 .Net 位图,但我无法使其正常工作。当我有每像素 24 位的图像时,我像这样初始化它们:

对于每像素 48 位的图像,我将 bmp 初始化如下:

但是,当尝试填充像素数据时,我无法使用 'Color::FromArgb()' 指定任何颜色值,R、G 和 B 的值大于 255。有没有办法绕过这个限制?

0 投票
1 回答
2760 浏览

c# - 在 Compact Framework (C#) 中调整大小(放大和缩小)

如何在 Compact Framework 上放大位图?我阅读了这篇文章和http://geeks.netindonesia.net/blogs/clawford/archive/2008/04/20/resizing-bitmap-tutorial-in-net-cf.aspx,它只是为了使位图更小。

谢谢!

0 投票
7 回答
11915 浏览

c# - 读取单色位图像素颜色

我不知道更好的标题,但我会描述这个问题。

我们使用的硬件具有显示图像的能力。它可以显示分辨率为 64 x 256 的黑白图像。

问题是我们必须发送到设备的图像格式。它不是标准的位图格式,而是一个简单的字节数组,代表图像的每个像素。

0 = 黑色,1 = 白色。

因此,如果我们有一个大小为:4 x 4 的图像,字节数组可能看起来像:

1000 0100 0010 0001

图像看起来像:

位图 http://www.mediafire.com/imgbnc.php/6ee6a28148d0170708cb10ec7ce6512e4g.jpg

问题是我们需要通过在 C# 中创建单色位图来创建此图像,然后将其转换为设备可以理解的文件格式。

例如,可以在设备上显示文本。为此,他必须创建一个位图并向其写入文本:

这里有2个问题:

  1. 生成的位图不是单色的
  2. 生成的位图具有不同的二进制格式

所以我需要一种方法:

  1. 在 .NET 中生成单色位图
  2. 读取位图中每个像素的单个像素颜色

我发现您可以将像素深度设置为 16、24 或 32 位,但没有找到单色,我不知道如何读取像素数据。

欢迎提出建议。

更新:我不能使用 Win32 PInvokes ......必须是平台中立的!

跟进:以下代码现在对我有用。(以防万一有人需要)

0 投票
3 回答
1512 浏览

c++ - 计算单色 BMP 的 BITMAPINFOHEADER biCompression 值

希望有人有答案,而且不是太复杂。我正在研究一个 C++ dll(没有 C# 或 .Net,完全静态的 DLL)。

无论如何,它在内置单色位图上工作。除了决议,我所有的一切都在工作。我得到设备上下文,获取兼容的设备上下文,构建位图,绘制我需要的东西(黑色/白色),并且可以保存。这一切都很好。但是,我不知道如何设置位图的分辨率。

在 C# 下从另一个实用程序进行一些测试时,我可以创建一个位图并设置分辨率。在这样做的过程中,我运行了一个例程来生成相同的文件内容,其参数从 1 到 300 用于分辨率。除了“biCompression”DWORD 属性中的值之外,每个图像的输出完全相同。默认是96x96的屏幕分辨率,但是对于300x300的打印机需要明显改变,甚至有些是203x203的分辨率。

0 投票
4 回答
4516 浏览

image-processing - 如何在 OCAML 中读取位图?

我想使用 OCAML 读取位图文件(从文件系统),并将像素(颜色)存储在具有位图维度的数组中,每个像素将占用数组中的一个单元格。

我找到了函数Graphics.dump_image image -> color array array 但它没有从文件中读取。