小菜请教CSDN上各大高手

Carpathia 2009-08-28 09:11:21
现在有一张JPEG图片,因为图片不清晰,有大量波纹,所以要求将这个图转化为BMP位图并去掉里面的单数行,目前问题所在就是BMP位图貌似不完整了 ,用BitImage怎么也转换不过去,请求问题所在根源,70分,在线等

//读取jpeg后转换,图片大小为704*576
Bitmap bitImage = new Bitmap(strPath);
MemoryStream ms = new MemoryStream();
bitImage.Save(ms, ImageFormat.Bmp);
byte[] hImageBytes = ms.ToArray();

//去掉单行后大小应该为704*288
byte[] buffer = new byte[704 * 288 * 3];//新图缓冲
int nLength = mHPHM.hImageBytes.Length;
int nTemp = 0;
for (int i = 0; i < 576; i++)
{
if (i % 2 == 0)
{
Array.Copy(mHPHM.hImageBytes, i * 704 * 3, buffer, nTemp * 704 * 3, 704 * 3);
nTemp++;
}
}
Bitmap bit = new Bitmap(new MemoryStream(buffer));?????在此地方出错,显示GDI+一般性错误,我觉得应该是bmp位图数据流被截断的原因所以导致图片不完整,所以比较头大,不知道如何去处理,所以请教CSDN上的各大高手,谢谢,若能得到答案,70分双手奉上,因为本人最多只有70分了
...全文
113 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-08-28
  • 打赏
  • 举报
回复
public static byte[] GetImageArray(System.Drawing.Image image)
{
System.IO.MemoryStream ms = new MemoryStream();
image.Save(ms, Image.RawFormat);
byte[] b=ms.ToArray();
ms.Close();
return b;
}

Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
Graphics draw = Graphics.FromImage(bmp2);
draw.DrawImage(bmp,0,0);
pictureBox1.Image = (Image)bmp2 ;
FILE = openFileDialog1.FileName;
openFileDialog1.Dispose();
draw.Dispose();
bmp.Dispose();
zhongjiekangping 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gomoku 的回复:]
不能这样直接截断。不了解Bitmap的内在结构是不能妄自作为的。

你可以用GetPixel,SetPixel慢慢做,或用LockBits后,拷贝各个扫描线。
具体看Bitmap.LockBits的参考和例子。
[/Quote]

up
aimeast 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gomoku 的回复:]
不能这样直接截断。不了解Bitmap的内在结构是不能妄自作为的。

你可以用GetPixel,SetPixel慢慢做,或用LockBits后,拷贝各个扫描线。
具体看Bitmap.LockBits的参考和例子。
[/Quote]
Yes!

另外还有把图片转换为string处理的方式,你应该会喜欢。
请看这里#27楼
http://topic.csdn.net/u/20080724/10/efae17c1-3ed7-4a00-82e2-72c96f2b2af4.html
icemh2008 2009-08-28
  • 打赏
  • 举报
回复
帮顶了
gomoku 2009-08-28
  • 打赏
  • 举报
回复
不能这样直接截断。不了解Bitmap的内在结构是不能妄自作为的。

你可以用GetPixel,SetPixel慢慢做,或用LockBits后,拷贝各个扫描线。
具体看Bitmap.LockBits的参考和例子
wiki14 2009-08-28
  • 打赏
  • 举报
回复
//更新图像
if (picCoverImage.Image != null)
{

using (MemoryStream mem = new MemoryStream())
{
//克隆Bitmap对象
Bitmap bmp = new Bitmap(picCoverImage.Image);
bmp.Save(mem, picCoverImage.Image.RawFormat);
book.CoverImage = new Binary(mem.ToArray());
bmp.Dispose();
}
}
liffe 2009-08-28
  • 打赏
  • 举报
回复
帮顶了

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧