找回密码
 立即注册

QQ登录

只需一步,快速开始

wangleiecho
中级会员   /  发表于:2012-11-19 15:39:00
11#
版主好,请问怎么获取ImageCellType 单元格中的图像

Image img = (Image)value;
这个方法是不好用的,而且如果赋值了 文本 会报错的
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-19 17:48:00
12#
直接通过以下代码就可以将单元格中的图像转换为Image对象:
  1. System.Drawing.Image iamge = fpSpread1.ActiveSheet.Cells[1, 1].Value as Image;
复制代码
回复 使用道具 举报
wangleiecho
中级会员   /  发表于:2012-11-19 18:05:00
13#
回复 12楼dof的帖子

可是我如我赋值的 是图片和文本 那么用上面的方法是取不出来图像的
有方法 能单独 取出 图像 和文本吗?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-20 13:53:00
14#
wangleiecho 你好

能否将你设置图像和文本,以及取图像的完整代码贴上来看一看,我不太确定我完全理解你的实现方法。
回复 使用道具 举报
wangleiecho
中级会员   /  发表于:2012-11-22 10:28:00
15#
版主好,按照版主的例子,我大概实现了一下,基本图文功能能实现
代码如下:
  1.     private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             ImageText imageCellType = new ImageText();
  4.             this.fpSpread1_Sheet1.DefaultStyle.CellType = imageCellType;
  5.             this.fpSpread1_Sheet1.Rows[0].Height = 250;
  6.             this.fpSpread1_Sheet1.Columns[0].Width = 200;
  7.             imageCellType.strValue = "我的美丽图片";
  8.             this.fpSpread1_Sheet1.Cells[0, 0].BackColor = Color.White;//不起作用
  9.             this.fpSpread1_Sheet1.Cells[0, 0].Value = Image.FromFile(@"..\..\Penguins.jpg");
  10.         }
  11.     }
  12.     public class ImageText : FarPoint.Win.Spread.CellType.ImageCellType
  13.     {
  14.         public string strValue = string.Empty;//文字
  15.         public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  16.         {
  17.             if (value != null)
  18.             {
  19.                 Image img = value as Image;
  20.                 g.DrawImage(img, new Rectangle(new Point(r.X, r.Y), new Size(200, 200)));
  21.                 g.DrawString(strValue, appearance.Font, new SolidBrush(Color.Black), new PointF(r.X, r.Y + 200));
  22.             }
  23.             else
  24.             {
  25.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  26.             }
  27.         }
  28.     }
复制代码
麻烦版主帮忙看看是否有更好的实现方法?
还有一个问题是 farpoint图片单元格的背景色怎么改,单元格的背景色应该是Control 怎么改成白色呢?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-23 11:08:00
16#
回复 15楼wangleiecho的帖子

wangleiecho 你好

我修改了ImageText的代码,请参考:

  1.     public class ImageText : FarPoint.Win.Spread.CellType.ImageCellType
  2.     {
  3.         private Picture picture;
  4.         public string strValue = string.Empty;//文字

  5.         public ImageText()
  6.         {
  7.             picture = new Picture();
  8.         }

  9.         public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  10.         {
  11.             if (value != null)
  12.             {
  13.                 Image image = value as Image;

  14.                 SolidBrush brush = new SolidBrush(Color.White);
  15.                 GraphicsState gstate = g.Save();
  16.                 g.IntersectClip(r);
  17.                 g.FillRectangle(brush, r);
  18.                 brush.Dispose();

  19.                 if (image != null)
  20.                 {
  21.                     Rectangle rectangle = new Rectangle(new Point(r.X, r.Y), new Size(200, 200));
  22.                     if (rectangle == Rectangle.Empty)
  23.                     {
  24.                         g.Restore(gstate);
  25.                         return;
  26.                     }
  27.                     picture.Image = image;                    
  28.                     picture.Paint(g, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
  29.                     g.DrawString(strValue, appearance.Font, new SolidBrush(Color.Black), new PointF(r.X, r.Y + 200));
  30.                 }
  31.                 g.Restore(gstate);
  32.             }
  33.             else
  34.             {
  35.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  36.             }
  37.         }
  38.     }
复制代码
回复 使用道具 举报
wangleiecho
中级会员   /  发表于:2012-11-23 14:26:00
17#
谢谢版主 基本好用。
但是图片过大则无法实现Stretch,也就是如果是大图片,则只取到自定义的大小,但是基本好用,可以填充的时候把图片弄合适些
回复 使用道具 举报
wangleiecho
中级会员   /  发表于:2012-11-23 14:32:00
18#
刚才又仿版主给代码的一段重新修改了一下基本实现想要的效果,图片的大小是Stretch的
添加了一句 版主代码中的控制颜色的
SolidBrush brush = new SolidBrush(Color.White);
g.FillRectangle(brush, r);
代码如下:

  1. public class ImageTextOther : FarPoint.Win.Spread.CellType.ImageCellType
  2.     {
  3.         public string strValue = string.Empty;//文字
  4.         public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  5.         {
  6.             if (value != null)
  7.             {
  8.                 SolidBrush brush = new SolidBrush(Color.White);
  9.                 g.FillRectangle(brush, r);
  10.                 Image img = value as Image;
  11.                 g.DrawImage(img, new Rectangle(new Point(r.X, r.Y), new Size(200, 200)));
  12.                 g.DrawString(strValue, new Font(new FontFamily("微软雅黑"), 11), new SolidBrush(Color.Black), new PointF(r.X, r.Y + 200));
  13.             }
  14.             else
  15.             {
  16.                 base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  17.             }
  18.         }
  19.     }
复制代码


多谢版主了
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-11-23 17:45:00
19#
谢谢 wangleiecho  分享你的代码。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部