Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2019.02.17;
Скачать: CL | DM;

Вниз

Проблема с большими Bitmap в Delphi7+KOL   Найти похожие ветки 

 
bobah   (2010-02-17 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   (2010-02-18 17:27) [1]

Вероятно, поможет tstBmp.fHandleType := bmDIB (это делается в SaveToFile) или создание через NewDIBBitmap. NewBitmap по умолчанию создаёт DDB-битмап, у которых меньше допустимый размер.


 
miek   (2010-02-18 20:42) [2]

Работать с БОЛЬШИМИ битмапами стандартными средствами (через GDI) вообще по определению не стоит. Будет большая и совершенно бесполезная нагрузка на память. Решение: MMF+StretchDIB.


 
Smile   (2010-02-18 22:19) [3]

Чёт я седня агрессивен:)
Я к тому, что плохо понимаю тягу к "КОЛ".
Уже и не в слишком далеком времени (прошлый век) мы, в качестве внешних носителей информации, использовали флоппи. Сначала 5.25 дюймовые (емкость 1.2 мгб), затем прорыв (условно 3-х дюймовые) емкостью аж 1.457 мгб.
Вот и подумалось, а почему бы сейчас не производить флоппики емкостью, скажем эдак 2.5 мгб, а может даже и поболее.

Собственно по этой причине мне и взгрутнулось при воспоминании КОЛ
Извините
:(


 
Barloggg   (2010-02-19 11:11) [4]

как раз-таки fillrect проходит. глюкает при попытке отрисовать.
не на каждом канвасе глючит кстати.
не знаю в чем тут дело, но глюка интересная.


 
Barloggg   (2010-03-05 11:38) [5]

я кстати с большими битмапами работал. но создавал их своим кодом, причем побайтово. и забацать битмапчик на 50мегов это было делом трех секунд загрузки неслабого процессора.
правда делал я его трансректально - писал в памяти (memorystream) файл в формате bmpфайла, потом создавал newBitmap и загружал его из этой памяти (bmp.loadfromstream)
и на экран выводился штатно.

да, мне тоже не очень нравилась эта двойная запись/загрузка но руки так и не дошли до оптимизации. оказывается по пути зарыты грабли. спасибо.



Страницы: 1 вся ветка

Текущий архив: 2019.02.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.003 c
11-1265359559
Barloggg
2010-02-05 11:45
2019.02.17
шрифт на канвасе выглядит разно!


11-1267713848
RusSun
2010-03-04 17:44
2019.02.17
Хинт ы


15-1476631640
xayam
2016-10-16 18:27
2019.02.17
Кубик 2х2х2


4-1291421794
Kto_tyT_a
2010-12-04 03:16
2019.02.17
CreateProcess + Windows Srv 2003 + ERROR_FILE_NOT_FOUND


11-1266412713
bobah
2010-02-17 16:18
2019.02.17
Проблема с большими Bitmap в Delphi7+KOL