对不起,如果这个问题很愚蠢,我只是从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,但应该有一些访问数据的方式)。
希望这会有所帮助。