Конференция "KOL" » Проблема с большими Bitmap в Delphi7+KOL [Delphi, Windows]
 
  • bobah (17.02.10 16:18) [0]
    Помогите пожалуйста разобраться с такой ситуацией: не получается  работать с большими BMP (больше 5000х5000 пикселей, 24bpp)
    Создаю KOL-проект, на KOL-форму кидаю KOLButton, на клик вешаю
    procedure TForm1.Button1Click(Sender: PObj);
    var tstBmp:PBitmap;
    begin
      tstBmp:=NewBitmap(5000,5000);
      tstBmp.Canvas.Brush.Color:=clRed;
      tstBmp.Canvas.FillRect(tstBmp.BoundsRect);
    end;


    При клике на кнопку получаю "Runtime erroк 216 at …"
    Если уменьшить разрешение все нормально проходит, но этот вариант не подходит.
    Так же всё нормально проходит и с таким размером изображения (и с большим разрешением), если после создания Bitmap сохранить его в поток или в файл, т.е.
    procedure TForm1.Button1Click(Sender: PObj);
    var tstBmp:PBitmap;
    begin
      tstBmp:=NewBitmap(5000,5000);
      tstBmp.SaveToFile('tst.bmp');
      tstBmp.Canvas.Brush.Color:=clRed;
      tstBmp.Canvas.FillRect(tstBmp.BoundsRect);
    end;

    работает без ошибок!

    Что не так делаю? как заставить работать без ненужного сохранения в поток или в файл?
  • Sapersky (18.02.10 17:27) [1]
    Вероятно, поможет tstBmp.fHandleType := bmDIB (это делается в SaveToFile) или создание через NewDIBBitmap. NewBitmap по умолчанию создаёт DDB-битмап, у которых меньше допустимый размер.
  • miek (18.02.10 20:42) [2]
    Работать с БОЛЬШИМИ битмапами стандартными средствами (через GDI) вообще по определению не стоит. Будет большая и совершенно бесполезная нагрузка на память. Решение: MMF+StretchDIB.
  • Smile (18.02.10 22:19) [3]
    Чёт я седня агрессивен:)
    Я к тому, что плохо понимаю тягу к "КОЛ".
    Уже и не в слишком далеком времени (прошлый век) мы, в качестве внешних носителей информации, использовали флоппи. Сначала 5.25 дюймовые (емкость 1.2 мгб), затем прорыв (условно 3-х дюймовые) емкостью аж 1.457 мгб.
    Вот и подумалось, а почему бы сейчас не производить флоппики емкостью, скажем эдак 2.5 мгб, а может даже и поболее.

    Собственно по этой причине мне и взгрутнулось при воспоминании КОЛ
    Извините
    :(
  • Barloggg (19.02.10 11:11) [4]
    как раз-таки fillrect проходит. глюкает при попытке отрисовать.
    не на каждом канвасе глючит кстати.
    не знаю в чем тут дело, но глюка интересная.
  • Barloggg (05.03.10 11:38) [5]
    я кстати с большими битмапами работал. но создавал их своим кодом, причем побайтово. и забацать битмапчик на 50мегов это было делом трех секунд загрузки неслабого процессора.
    правда делал я его трансректально - писал в памяти (memorystream) файл в формате bmpфайла, потом создавал newBitmap и загружал его из этой памяти (bmp.loadfromstream)
    и на экран выводился штатно.

    да, мне тоже не очень нравилась эта двойная запись/загрузка но руки так и не дошли до оптимизации. оказывается по пути зарыты грабли. спасибо.
 
Конференция "KOL" » Проблема с большими Bitmap в Delphi7+KOL [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]