使用图像中的特定PixelFormat在C#中创建一个位图,而无需加载图像



对不起,如果这个问题很愚蠢,我只是从c#

开始

我有一个磁盘中的图像,我知道路径。该图像的大小为20000x10000 APROX,大小约为400MB(我知道这是图像)

我需要将其加载到代码中并进行调整大小,因为如果我尝试放入图像框400m的图像框,但是如果我做

        Bitmap b0 = new Bitmap(pathImage);
        int newWidth = (int)(b0.Width * escala);
        int newHeight = (int)(b0.Height * escala);
        // Convert other formats (including CMYK) to RGB.
        Bitmap newImage = new Bitmap(newWidth, newHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
        // Draws the image in the specified size with quality mode set to HighQuality
        using (Graphics graphics = Graphics.FromImage(newImage))
        {
            graphics.CompositingQuality = CompositingQuality.HighQuality;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.SmoothingMode = SmoothingMode.HighQuality;
            graphics.DrawImage(b0, 0, 0, newWidth, newHeight);
        }

但是,当我做bitmap b0 = new bitmap(phatimage);它只是自20000x10000x32以来就死了,这对我的记忆力差而已。

问题在于,如果未指定,C#仅用作Pixel Format format32bppargb,但我希望格式化1BppIndexed,而我发现更改格式的唯一方法是使用constructor

bitmap(int宽度,int高度,int大步,PixelFormat格式,INTPTR扫描0)

但是,对于此构造函数,我需要知道图像的大小,在我不知道的代码中,它在代码可以获取并知道大小之前就死了...

我迷路了。有什么想法吗?

编辑:这样做int宽度;

        int height;
        Image tif;
        using (FileStream file = new FileStream(rutaImagenEntrada, FileMode.Open, FileAccess.ReadWrite))
        {
            using ( tif = Image.FromStream(stream: file,
                                                useEmbeddedColorManagement: false,
                                                validateImageData: false))
            {
                width = (int)tif.PhysicalDimension.Width;
                height = (int)tif.PhysicalDimension.Height;
                
            }
            file.Close();
        }

我获得了无法加载的图像的大小,并且可以使用我想要的PixelforMat和大小创建一个位图,但是每次尝试上传它都无法正常工作,它仍然会崩溃。我已经尝试使用Graphics .Draw(Tiff ...)和Tiff.GetThumbNail(新尺寸...),它只是在我身上。它针对X86和.NET 3.5,因为这些是客户的要求...

有什么想法?

如果FileStream可以打开文件,则可能需要尝试一些其他bitmap的构造函数,尤其是bitmap(流)。

如果这无济于事,您可以尝试加载原始的BMP数据,使用所需的格式创建一个位图,然后手动将数据复制到位图(我不熟悉C#bitmaps,但应该有一些访问数据的方式)。

希望这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新