Delphi: Рациональное использование оперативы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Mixon, 14 Oct 2012.

  1. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Проблема с использованием больших изображений в TImage
    Загружаю изображение 8 мегабайт - выдаёт ошибку "недостаточно памяти для обработки команды"
    в диспетчере смотрю, использует 120 мегабайт памяти максимум (сободной оперативы еще 3 гига остаётся)

    как увеличить этот рубеж???

    причём забавная штука, на виндов 7 - использует 210 метров - ошибки нету
    на ХР доходит до 120 метров и рубится этой ошибкой...

    Размер стека максимальный, не помогает...
    Пробовал создавать потоки - не помогает...
    Гуглил почти 10 часов, до 15й страницы гугла - ни единого толкового совета по решению проблемы или хотя-бы её описания
     
    #1 Mixon, 14 Oct 2012
    Last edited: 14 Oct 2012
  2. Teratex

    Teratex New Member

    Joined:
    13 Mar 2012
    Messages:
    28
    Likes Received:
    3
    Reputations:
    5
    Нужно код смотреть, а так сказать сложно. Какая версия Делфи?
     
  3. alexey-m

    alexey-m Elder - Старейшина

    Joined:
    15 Jul 2009
    Messages:
    518
    Likes Received:
    100
    Reputations:
    37
    рой исходники TImage, Graphics.pas в частности и ищи при каких условиях генерится эксепшины по нехватке памяти, ну или как вариант попробовать юзать GDI+
     
  4. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Такие есть такие проблемы. Почему то нельзя загрузить в TBitmap BMP файл в 100-200 мб(24 bit), после долгих размышлений выдает - Out of Memory. Подозреваю, что проблема в GDI. Вообще все это может казаться бредом, но сайчас лень лезть отлаживать и искать где проблема и в последний раз я с этим сталкивался лет 7 назад и мне было тогда тоже лень искать(да и не знал как), короче забил.

    ТС, а вообще можно загрузить BMP файл ручками и в TImage через TImage.Picture.Scanline отображать только нужный в данный момент фрагмент и все.
     
  5. Teratex

    Teratex New Member

    Joined:
    13 Mar 2012
    Messages:
    28
    Likes Received:
    3
    Reputations:
    5
    Вообще это по моему траблы с самим компонентом, потому я использовал сторонние обычно
     
  6. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    Code:
        pic:=TPicture.Create;
        pic.LoadFromFile(sDirectoryEdit1.Text+'\Stamps_p01.jpg');
        bmp:=TBitmap.Create;
        bmp.Width:=pic.Width;
        bmp.Height:=pic.Height;
        bmp.Canvas.Draw(0,0,pic.Graphic);
        Image1.Picture.Bitmap.Assign(bmp);
        Img1Height:=Image1.Height;
        Img1Width:=Image1.Width;
        bmp.Free;
        pic.Free;
    
        pic:=TPicture.Create;
        pic.LoadFromFile(sDirectoryEdit1.Text+'\Stamps_p02.jpg');
        bmp:=TBitmap.Create;
        bmp.Width:=pic.Width;
        bmp.Height:=pic.Height;
        bmp.Canvas.Draw(0,0,pic.Graphic);
        Image2.Picture.Bitmap.Assign(bmp);
        Img2Height:=Image2.Height;
        Img2Width:=Image2.Width;
        bmp.Free;
        pic.Free;
    RadStudio XE3

    Мне нужно подгрузить 2 jpg имаги в контейнеры Image1 и Image2 а потом работать с ними в GDI+ отображая изменения в "реальном времени"
     
  7. 2echnoman

    2echnoman New Member

    Joined:
    3 Jul 2012
    Messages:
    54
    Likes Received:
    0
    Reputations:
    0
    Rad Studio XE2, Win XP работает норм. Файл: http://upload.wikimedia.org/wikipedia/commons/4/43/BMP-1%2C_National_Museum_of_the_Great_Patriotic_War.jpg
     
  8. Mixon

    Mixon Elder - Старейшина

    Joined:
    12 Mar 2008
    Messages:
    394
    Likes Received:
    119
    Reputations:
    12
    этот-же код? тут два раза процедура, в 2 объекта 2 картинки
     
  9. 2echnoman

    2echnoman New Member

    Joined:
    3 Jul 2012
    Messages:
    54
    Likes Received:
    0
    Reputations:
    0
    [​IMG]