large image loading - RealWorld forums

Log-in or register.

large image loading

image loading
Anonymous
on March 31st 2008

Hi
I want to show a large image in C#,but I recieve Out of memory error.
how can I read the smaller block of my picture and show it.I work with GDI .
here is my code .I try to load one part of my picture but at last line of my code I recieve this error.my image is 20MB jpg with 12000*14000

Image MapImage = null;
MapImage1 = Image.FromFile("filename.jpg");
Rectangle recDes1 = new Rectangle(0,  0, 1000, 1000);
Rectangle recSrc1 = new Rectangle(0, 0, 1000, 1000);
gr.DrawImage(MapImage1, recDes1, recSrc1, GraphicsUnit.Pixel);

by regards

Vlasta
on March 31st 2008

Hm, the unpacked image would require more than 0.5 GB of memory. Given the inefficiency of managed code I am not wondering you are getting these memory errors. I doubt GDI+ would be able to read only a part of the image, it is a rather special request. Maybe a some specialized imaging library would help. Or try 64bit environment if it is possible.

Anonymous
on March 31st 2008

hi
the second line of top code was loaded into memory and I use this code to refrence each slice of picture to one bitmap object.and with this sharing of memory to some bitmap object I can show this picture.but I dont want to use .5GB of my memory.

Anonymous
on March 31st 2008
img1= Image.FromFile("filename.jpg");

for (int f = 1; f <= 6; f  )
{
    ColSelect = 0;

    for (int ff = 1; ff <= 6;ff  )
    {
        imgcount  ;

        bmpData = img1.LockBits(new Rectangle(ColSelect, RowSelect, WidthPerCol, HeightPerRow),ImageLockMode.ReadWrite ,img1.PixelFormat );
        ptr[f-1,ff-1] = bmpData.Scan0;
        strd[f-1,ff-1]=bmpData.Stride;

        img1.UnlockBits(bmpData);

        img2[f - 1, ff - 1] = new Bitmap(WidthPerCol,HeightPerRow,strd[f-1,ff-1] ,img1.PixelFormat ,ptr[f-1,ff-1]);

        ColSelect  = WidthPerCol;
    }
    RowSelect  = HeightPerRow;
}
Page views: 12444       Posts: 4      
Select background
Vista & Win 7 icons
What about ICL files?