项目需求是这样的, 软件有一个绘图区域 如画布 600*6000 ,用户在此画布上绘制完保存时程序要把用户画图所在区域坐标截取出来保存为图片 如 绘制的300*400 的图片, 现在的做法是调用win API 但是发现图片失真,有更好的办法吗? Graphics g1 = this.designer1.CreateGraphics(); Bitmap myImage = new Bitmap(rec.Width, rec.Height, g1); Graphics g2 = Graphics.FromImage(myImage); IntPtr dc1 = g1.GetHdc(); IntPtr dc2 = g2.GetHdc(); BitBlt(dc2, 0, 0, rec.Width, rec.Height, dc1, rec.X, rec.Y, 13369376); g1.ReleaseHdc(dc1); g2.ReleaseHdc(dc2); g1.Dispose(); Bitmap map = ImageFormat.toBitmap(myImage, 255); //印章图片缓存起来 Maticsoft.Common.DataCache.SetCache("SealImage", map); MessageBox.Show("保存成功"); f.Dispose(); f.Close(); 绘制的原图 |
|
试试调用屏幕截图,然后再截取相应大小和位置的图片试试 |
|
myImage你把它保存了不就好了。
|
|
先把你转换完的bmp显示出来,看什么样
看到底是转换的问题,还是保存的问题 |
|
还有,能直接保存的,就别转来转去的了
来回转格式,不失真才怪呢 |
|
截图图片来自于 Bitmap map = ImageFormat.toBitmap(myImage, 255); |
|
楼猪尿血了。。。
|
|
试试调用屏幕截图,然后再截取相应大小和位置的图片试试 请问版主屏幕截图如何实现呢? |
|
20分 |
既然用DotNet就要用它先进的地方,一行Bitmap.Clone代码就可以搞定:
Bitmap bmp = new Bitmap(@"c:\temp\penguins.jpg"); Bitmap bmp2 = bmp.Clone(new Rectangle(100, 100, 300, 200), bmp.PixelFormat); bmp2.Save(@"c:\temp\bmp2.jpg"); |
楼猪,你要自己动脑子多想。。。。
|
|
我也在学习研究学习。
是不是图片格式不适合? 用PNG试试。 |
|
20分 |
直接保存的,就别转来转去的
|
老师,,你是高手。。膜拜中。。。 |