2012-09-24 59 views
0

我创建从一个的ReportViewer字节组图像像下面如何在<img/>标记中显示多页图像?

bytes= reportViewer.ServerReport.Render("Image", null, out mimeType, out encoding, out extension, out streamids, out warnings); 

而且我用下面这创造了一个图像中有12页的代码保存在一个物理路径。

System.IO.File.WriteAllBytes(@"C:\test.jpeg", bytes); 

我想表明在<img>标签这个图像与另一个之后的所有页面。我试过<img src="c://test.jpeg" />,它只显示第一页。

任何人都可以帮助我吗?

回答

0

找到回答下面我用来解决这个问题。 找台阶

第一 - 从获取的图像流的所有帧作为图像

public List<Image> GetAllFrames(Stream sm) 
     { 
      List<Image> images = new List<Image>(); 
      Bitmap bitmap = new Bitmap(sm); 
      int count = bitmap.GetFrameCount(FrameDimension.Page); 
      for (int idx = 0; idx < count; idx++) 
      { 
       bitmap.SelectActiveFrame(FrameDimension.Page, idx); 
       MemoryStream byteStream = new MemoryStream(); 
       bitmap.Save(byteStream, ImageFormat.Tiff); 

       images.Add(Image.FromStream(byteStream)); 
      } 
      return images; 
     } 

二的名单 - 将所有帧到一个位图。

public Bitmap CombineAllFrames(List<Image> test) 
     { 
      int width = 0; 
      int height = 0; 
      Bitmap finalImage = null; 
      try 
      { 
       foreach (Bitmap bitMap in test) 
       { 
        height += bitMap.Height; 
        width = bitMap.Width > width ? bitMap.Width : width; 
       } 
       finalImage = new Bitmap(width, height); 
       using (System.Drawing.Graphics gc = Graphics.FromImage(finalImage)) 
       { 
        gc.Clear(Color.White); 
        int offset = 0; 
        foreach (Bitmap bitmap in test) 
        { 
         gc.DrawImage(bitmap, new Rectangle(0, offset, bitmap.Width, bitmap.Height)); 
         offset += bitmap.Width; 
        } 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
      return finalImage; 
     } 

该方法创建一个位图,它将所有帧垂直地附加到单个帧中。 如果你想让它使水平更新为

width += bitmap.Width; 
      height = bitmap.Height > height ? bitmap.Height : height; 
g.DrawImage(image, 
      new System.Drawing.Rectangle(offset, 0, image.Width, image.Height)); 

第三步 - 现在,如果你想要创建的图像 调用下面的方法的字节数组。

public byte[] GetBytesFromImage(Bitmap finalImage) 
     { 
      ImageConverter convertor = new ImageConverter(); 
      return (byte[])convertor.ConvertTo(finalImage, typeof(byte[])); 
     } 

我认为这会帮助一些人确实需要。如果有人找到一个简单的方法来做这件事,请发帖。

0

要显示多张图片,请使用html <img>标记。

为了展示独特的图片,我建议你重新标记您的图片像IMG1,IMG2,IMG3,等等......所以,在你的img标签,你可以做这样的事情:

<img src="folder/img<?php echo rand(1,10); ?>.jpg" /> 
+0

我不想创建多个Img标签,这是不正确的,因为我没有一个图像,而是有一个12帧的图像。 – Pradeep

相关问题