问题
I'm trying to generate a simple tiff image at runtime. This image consists of white background and image downloaded from remote server.
Here's the code I've written for reaching that goal:
        const string url = "http://localhost/barcode.gif";
        var size = new Size(794, 1123);
        var drawingVisual = new DrawingVisual();
        using (var drawingContext = drawingVisual.RenderOpen())
        {
            drawingContext.DrawRectangle(new SolidColorBrush(Colors.White), null, new Rect(size));
            var image = new BitmapImage(new Uri(url));
            drawingContext.DrawImage(image, new Rect(0, 0, 180, 120));
        }
        var targetBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96, 96, PixelFormats.Default);
        targetBitmap.Render(drawingVisual);
        var convertedBitmap = new FormatConvertedBitmap(targetBitmap, PixelFormats.BlackWhite, null, 0);
        var encoder = new TiffBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(convertedBitmap));
        using (var fs = new FileStream("out.tif", FileMode.Create))
        {
            encoder.Save(fs);
        }
The code works and generates "out.tif" file. But the output file has just a white background, without image received from remote server.
What can be the problem? I have tried the following code in a variety of ways, but everytime with no luck.
回答1:
I found this reading about the FormatConvertedBitmap class. Maybe give it a shot
        FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap();
        // BitmapSource objects like FormatConvertedBitmap can only have their properties
        // changed within a BeginInit/EndInit block.
        newFormatedBitmapSource.BeginInit();
        // Use the BitmapSource object defined above as the source for this new 
        // BitmapSource (chain the BitmapSource objects together).
        newFormatedBitmapSource.Source = targetBitmap;
        // Set the new format to BlackWhite.
        newFormatedBitmapSource.DestinationFormat = PixelFormats.BlackWhite;
        newFormatedBitmapSource.EndInit();
    来源:https://stackoverflow.com/questions/10439621/creating-tiff-image-at-runtime-in-wpf