Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.05.2012, 23:41   #31
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

Rin -спасибо ! попробую)
FoggySpurs вне форума Ответить с цитированием
Старый 26.05.2012, 23:44   #32
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от FoggySpurs Посмотреть сообщение
Первый пиксель записан в 4 битах 5047037440-...37 бите
Можно расчет - как получается это число?
s-andriano вне форума Ответить с цитированием
Старый 26.05.2012, 23:50   #33
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

это размер файла минус длинна строки
FoggySpurs вне форума Ответить с цитированием
Старый 26.05.2012, 23:51   #34
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Ну так и идите от конца файла.
Код:
var
f:TMemoryStream;
r,g,b:byte;
begin
f:=TMemoryStream.Create;
f.LoadfromFile('1.bmp');
f.seek(3,soEnd);// читать с конца (если указать soBeginning вместо soEnd, то
// перейдем на 4 байт от начала, т.к. первый байт под номером "0")
f.Read(b,1);
f.Read(g,1);
f.Read(r,1);
PaintBox1.Canvas.Pixels[0,0]:=RGB(r,g,b);
f.Free;
end;
Да уж...
Нет, если читать файл побайтно вместо того, чтобы по сканлиниям, то, возможно, задержки от того, что файл читается с конца, а не с начала, и не будут слишком заметными.

Я бы читал файл с начала, переписывая сканлинии целиком в буфер, в котором сформировал бы образ BMP-файла нужного размера. И уже этот файл отображал бы в нужном месте формы.
s-andriano вне форума Ответить с цитированием
Старый 26.05.2012, 23:58   #35
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

мне важно что бы занималось как можно меньше памяти( требование такое) и способ подходил для всех бмп!Зачем сканить всю строку в 12859 пикселей если вывести нужно будет всего 665?
FoggySpurs вне форума Ответить с цитированием
Старый 27.05.2012, 00:02   #36
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

var
f:TMemoryStream;
r,g,b:byte;
begin
f:=TMemoryStream.Create;
f.LoadfromFile('1.bmp');
f.seek(3,soEnd);// читать с конца (если указать soBeginning вместо soEnd, то
// перейдем на 4 байт от начала, т.к. первый байт под номером "0")
f.Read(b,1);
f.Read(g,1);
f.Read(r,1);
PaintBox1.Canvas.Pixels[0,0]:=RGB(r,g,b);
f.Free;
end;
в этом коде куда писать номер байта который нужен? и что означает число 3 в seek?
FoggySpurs вне форума Ответить с цитированием
Старый 27.05.2012, 00:02   #37
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Кто сказал "всю строку"?
Просто вместо 1995 чтений по 1 байту нужно сразу читать фрагмент файла длиной 1995 байт.
Т.е. "всю строку", но не исходного изображения, а требуемого фрагмента.
s-andriano вне форума Ответить с цитированием
Старый 27.05.2012, 00:07   #38
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Этот не юзайте:
Код:
var
f:TMemoryStream;
r,g,b:byte;
begin
f:=TMemoryStream.Create;
f.LoadfromFile('1.bmp');
f.seek(3,soEnd);// читать с конца (если указать soBeginning вместо soEnd, то
// перейдем на 4 байт от начала, т.к. первый байт под номером "0")
f.Read(b,1);
f.Read(g,1);
f.Read(r,1);
PaintBox1.Canvas.Pixels[0,0]:=RGB(r,g,b);
f.Free;
end;
Он основывался на том, что последние 3 байта файла, это первый пиксель. Но оказалось, что s-andriano был прав. Я исправил код.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 27.05.2012, 00:11   #39
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Это означает, что перейдем на 3 байт с конца файла.
Код:
f.seek(3,soEnd)
А это
Код:
Read(b,1)
считает 3 байт с конца, и перейдет на 2 байт с конца.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 27.05.2012, 00:17   #40
FoggySpurs
Пользователь
 
Регистрация: 14.04.2012
Сообщений: 41
По умолчанию

а как тогда это загнать в цикл зная размеры нужного фрагмента?
FoggySpurs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открыть файл, разделить ячейку на 1000, сохранить файл, закрыть файл. Как? Ник Харди Microsoft Office Excel 7 30.01.2012 18:47
Не заливается на ФТП большой файл ramzes777 Работа с сетью в Delphi 3 26.10.2011 10:19
Разбить большой файл на более мелкие Sat_Kelman Microsoft Office Excel 4 18.03.2011 13:06
отдавать большой файл с фтп TaTT DoGG PHP 5 03.07.2009 10:34
ActiveX не хочет читать большой файл Miklek Общие вопросы Delphi 0 02.04.2009 11:55