首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自TransformedBitmap对象的“‘Stride”问题

来自TransformedBitmap对象的“‘Stride”问题
EN

Stack Overflow用户
提问于 2010-09-15 02:47:06
回答 1查看 1.8K关注 0票数 7

我有一个格式为{Indexed8}的2208 x 3000 TransformedBitmap对象,我正在对它执行.CopyPixels()。我正在使用

代码语言:javascript
复制
(int)((formattedBitmap.PixelWidth * formattedBitmap.Format.BitsPerPixel + 7) / 8)

(假设'formattedBitmap‘是我试图从其复制像素的图像的名称),用于我的方法调用中的'stride’值和一个长度为2208的字节数组。我在代码中的其他地方(其中图像的格式是{Gray8} )中也有类似的东西。但是,当我尝试对上述图像执行相同的操作时,我不断收到“参数超出范围”异常,指出“参数值不能小于‘6624000’。\r\n参数名称:buffer。”

我的问题是:为什么世界上完全相同的代码似乎在一个地方工作,而在另一个地方却不能工作?用外行的话来说,世界上什么是真正的“大步”?如何才能在不出现此错误的情况下获得所需的效果(复制比特)?我做错了什么?

任何对此的帮助都将不胜感激。非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-15 03:16:48

我已经弄明白了(wow...kinda不敢相信我花了将近一个小时的时间来搞这个!)。问题是字节数组的大小必须是

代码语言:javascript
复制
sourceImage.PixelHeight * stride

哪里

代码语言:javascript
复制
int stride = (int)((sourceImage.PixelWidth * sourceImage.Format.BitsPerPixel + 7) / 8);

在我的代码中,它在其他位置工作的原因是因为我没有复制整个图像的像素(就像我试图在我遇到问题的地方做的那样),我只复制了单个row...that的像素,基本上是2008x1的区域,所以目标字节数组的大小可以正好是2208,这样它就可以很好地工作。对于将来的参考,可能应该总是,或多或少,使用这样的东西:

代码语言:javascript
复制
int width = source.PixelWidth;
int height = source.PixelHeight;
int stride = width * ((source.Format.BitsPerPixel + 7) / 8);

byte[] bits = new byte[height * stride];

source.CopyPixels(bits, stride, 0);

干杯!

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

https://stackoverflow.com/questions/3711947

复制
相关文章

相似问题

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