Re: How to convert image from Format1bppIndexed to Format24bppRgb?
- From: "Bob Powell [MVP]" <bob@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Sat, 23 Apr 2005 17:52:04 +0200
The size of the image file has no bearing on the amount of memory you need
to represent that file internally. A JPEG image is compressed and when the
image is read and turned into a raster the memory requirements are well
known and fixed. The size of a 1bpp image is 24 times smaller than the
equivalent 24bpp image in memory.
If your file has 10,000 by 10,000 pixels that will require 3*10000*10000
bytes (300 million bytes). To store an Argb file would be 400 million bytes.
Given that your system might be using a considerable chunk of the 1 gig
available and the image might require 400 megs as well you're running fairly
close to the limits.
Paging of virtual memory is slow and not really designed for huge amounts of
memory that images require so that will further restrict the system.
You're correct in saying that the code looks fine. If the image were smaller
it'd work just fine. When the system says you're out of memory believe it.
It knows.
Add a bunch of 1 gb simms and things will be happier.
--
Bob Powell [MVP]
Visual C#, System.Drawing
Find great Windows Forms articles in Windows Forms Tips and Tricks
http://www.bobpowell.net/tipstricks.htm
Answer those GDI+ questions with the GDI+ FAQ
http://www.bobpowell.net/faqmain.htm
All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.
"JY" <blackcarrera@xxxxxxxxxxx> wrote in message
news:bc38f5ee.0504221152.4f7523d@xxxxxxxxxxxxxxxxxxxxx
> All of my images that are 24bppRgb are also about 41MB in size,
> 10000x10000 pixels are fine when I make calls to FromImage, DrawImage,
> etc. It's only when I try to convert the 1bpp to 24bppRbg that I run
> into the problem when I make calls to DrawImage (in the process of
> trying to convert pixel formats)...
>
> I also have 1GB RAM so I don't really think that I'm literally "Out of
> memory" (how did you calculate that I would need 128MB?)
>
> Any other ideas? My code looks ok?
>
> Thanks again for your help!!
>
> -------------------------------------------------------------------------------
> -------------------------------------------------------------------------------
> That suggests to me that it's a bit large then.. If the image was
> square
> it'd be 6556 pixels on a side. To make a 24 bit per pixel image you'd
> require 128 megabytes of memory.
>
> There is a possibility that the resulting image is indeed too large
> for the
> machine.
>
> --
> Bob Powell [MVP]
> Visual C#, System.Drawing
>
> Find great Windows Forms articles in Windows Forms Tips and Tricks
> http://www.bobpowell.net/tipstricks.htm
>
> Answer those GDI+ questions with the GDI+ FAQ
> http://www.bobpowell.net/faqmain.htm
>
> All new articles provide code in C# and VB.NET.
> Subscribe to the RSS feeds provided and never miss a new article.
>
>
>
>
>
> "JY" <blackcarrera@xxxxxxxxxxx> wrote in message
> news:bc38f5ee.0504220621.6e05e418@xxxxxxxxxxxxxxxxxxxxx
>> Thanks for your response Bob... The 1bpp mage is about 41MB
>>
>> "Bob Powell [MVP]" <bob@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote in message
>> news:<uKzQARsRFHA.3560@xxxxxxxxxxxxxxxxxxxx>...
>>> How big is the 1bpp image?
>>>
>>> --
>>> Bob Powell [MVP]
>>> Visual C#, System.Drawing
>>>
>>> Find great Windows Forms articles in Windows Forms Tips and Tricks
>>> http://www.bobpowell.net/tipstricks.htm
>>>
>>> Answer those GDI+ questions with the GDI+ FAQ
>>> http://www.bobpowell.net/faqmain.htm
>>>
>>> All new articles provide code in C# and VB.NET.
>>> Subscribe to the RSS feeds provided and never miss a new article.
>>>
>>>
>>>
>>>
>>>
>>> "JY" <blackcarrera@xxxxxxxxxxx> wrote in message
>>> news:bc38f5ee.0504211045.101b6cc5@xxxxxxxxxxxxxxxxxxxxx
>>> > Hi,
>>> > I'm trying to convert an image with PixelFormat Format1bppIndexed
> to
>>> > Format24bppRgb. I keep getting the "Out of memory" message.
>>> >
>>> > Here's what I've tried:(
>>> >
>>> > (where bm.PixelFormat is Format1bppIndexed)
>>> > 1)
>>> > bm2 = New Bitmap(bm.Width, bm.Height, PixelFormat.Format24bppRgb)
>>> > g2 As Graphics = Graphics.FromImage(bm2)
>>> > g2.DrawImage(bm, subRect, 0, 0, bm.Width, bm.Height,
>>> > GraphicsUnit.Pixel)
>>> >
>>> > -> get "Out of memory"
>>> >
>>> > 2)
>>> > bm2 = bm.Clone(New Rectangle(0, 0, bm.Width, bm.Height),
>>> > PixelFormat.Format24bppRgb)
>>> >
>>> > -> the new bitmap bm2 is Format1bppIndexed, not Format24bppRgb
>>> >
>>> > Any ideas? I don't necessarily need the image to be
> Format24bppRgb - I
>>> > just need to be able to use the function "Graphics.FromImage" (so
> it
>>> > could be Format16bppRgb555, etc). Any help will be greatly
>>> > appreciated!!
.
- Follow-Ups:
- Re: How to convert image from Format1bppIndexed to Format24bppRgb?
- From: blackcarrera
- Re: How to convert image from Format1bppIndexed to Format24bppRgb?
- References:
- Prev by Date: e.graphics to image file
- Next by Date: Re: Fixed Header Rectangle
- Previous by thread: How to convert image from Format1bppIndexed to Format24bppRgb?
- Next by thread: Re: How to convert image from Format1bppIndexed to Format24bppRgb?
- Index(es):
Relevant Pages
|