user iconAnonymous on March 30th 2008
12530 views

topic iconlarge image loading

image loading

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

user iconVlasta on March 30th 2008 0

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.

user iconAnonymous on March 30th 2008 0

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.

user iconAnonymous on March 30th 2008 0
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;
}
user icon