На 95% возможно в этом. Тип TBitmap - наследник стандартного виндового битмапа. Возможно в Win2K было такое ограничение. Или файл подкачки слижком мал, или ограничение состоит в том, что часть битмапа не может быть в виртуальной памяти. Касательно моего примера - система ХР, оперативы 2Гб - так что проверить на 192М не получиться." писал(а):
Да оперативки та немного 196 Мб, но я думаю может причина в Windows 2000.
Вспоминаю когда стояла XP вроде не было такой проблеммы..
Что скажешь?
Как увеличить максимальный объем TImage больше 64Мб
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 8
- Зарегистрирован: 12 апр 2007, 15:46
ОК. Придется ставить ХР. Может поможет...somewhere писал(а):На 95% возможно в этом. Тип TBitmap - наследник стандартного виндового битмапа. Возможно в Win2K было такое ограничение. Или файл подкачки слижком мал, или ограничение состоит в том, что часть битмапа не может быть в виртуальной памяти. Касательно моего примера - система ХР, оперативы 2Гб - так что проверить на 192М не получиться.
-
- Сообщения: 8
- Зарегистрирован: 12 апр 2007, 15:46
Проблему до конца решить не удалось.
А проблема в дефрагментации памяти.
Для TImage нужен цельный кусок памяти.
Если перезагрузить комп и удалить из памяти все лишнее, то TImage получается больше 104 Мб даже при моей маленькой оперативке.
Нужна какая процедура на Delphi, которая дефрагметировала бы оперативную память компа.
Может кто встречал в инете?
Если найду, напишу в форум.
Всех благ
А проблема в дефрагментации памяти.
Для TImage нужен цельный кусок памяти.
Если перезагрузить комп и удалить из памяти все лишнее, то TImage получается больше 104 Мб даже при моей маленькой оперативке.
Нужна какая процедура на Delphi, которая дефрагметировала бы оперативную память компа.
Может кто встречал в инете?
Если найду, напишу в форум.
Всех благ
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Я тут работал раньше с большими картинками.familytree писал(а):Проблему до конца решить не удалось.
А проблема в дефрагментации памяти.
Для TImage нужен цельный кусок памяти.
Если перезагрузить комп и удалить из памяти все лишнее, то TImage получается больше
Писал на С, на Дельфи скорее спортировал криво:
Самый простой вариант выглядит так:
Код: Выделить всё
procedure TPaintSurface.readFile(fileName: string);
var
rawData : ^byte;
bitCount : integer;
begin
{Убираем остатки старого файла}
cleanup;
{Открываем файл}
hFile := CreateFile(PChar(fileName),
GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
{Создаем объект ядра типа маппинг}
hMapping := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);
{Отображаем его на память}
pFileContents := MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
rawData := pFileContents;
{Расставляем указатели. Сначала идет BitmapFileHeader}
PaintSurface.pBitmapFileHeader := Pointer(rawData);
Inc(rawData, SizeOf(TBitmapFileHeader));
{Потом идет BitmapInfoHeader}
PaintSurface.pBitmapInfoHeader := Pointer(rawData);
PaintSurface.pBitmapInfo := Pointer(rawData);
Inc(rawData, SizeOf(TBitmapInfoHeader));
bitCount := (PaintSurface.pBitmapInfoHeader^).biBitCount;
{Если количество бит на пиксель 8 или меньше, то дальше идет палитра.
Иначе - сами сканлинии}
if (bitCount <= 8) then
begin
PaintSurface.pPalette := Pointer(rawData);
Inc(rawData, SizeOf(TRgbQuad) * (1 shl bitCount));
end
else
begin
PaintSurface.pPalette := nil;
end;
PaintSurface.pRawImageData := Pointer(rawData);
end;
- Вложения
-
- arc.zip
- (11.97 КБ) 17 скачиваний
2B OR NOT(2B) = FF