Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый доступ к пикселям (в памяти?(как сделать?), TBitmap->Canvas->Pixels[i][j]=... -slow 
:(
    Опции темы
zogman
Дата 30.1.2005, 16:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Помогите !
Как мне быстро работать с картинкой ?
(Мне достаточно работы с образом картинки в памяти,
дело не в прорисовке).

TBitmap->Canvas->Pixels[i][j]=...
- работает медленней раз в 30 чем
если бы это был просто массив в ОЗУ.

Я бы хотел считать картинку в память,
а потом работать с ней по пикселям.
**************************
Второй вопрос :

Как мне найти где лежат в памяти байты картинки
после считывания?
т.е.
я ее считал через
Graphics::TBitmap *bmp;
bmp=new Graphics::TBitmap();
bmp->LoadFromFile("a.bmp");

Как мне найти где лежат BITMAPFILEHEADER
BITMAPINFOHEADER ?

  Вверх
Kesh
Дата 30.1.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: нет
Всего: 54



А Canvas.Lock - Canvas.Unlock ты не пробовал...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Illusion Dolphin
Дата 30.1.2005, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: нет
Всего: 63



А как же метод
Код

bmp->ScanLine[Line_Number]
?

Кроме всего, если тебе интересна структура файла, то вот:
Цитата


--------------------------------------------------------------------------------

Структура Bmp-файла
Имя Длина Смещение Описание
Заголовок файла (BitMapFileHeader)
Type 2 0 Сигнатура "BM"
Size 4 2 Размер файла
Reserved 1 2 6 Зарезервировано
Reserved 2 2 8 Зарезервировано
OffsetBits 4 10 Смещение изображения от начала файла
Информационный заголовок (BitMapInfoHeader)
Size 4 14 Длина заголовка
Width 4 18 Ширина изображения, точки
Height 4 22 Высота изображения, точки
Planes 2 26 Число плоскостей
BitCount 2 28 Глубина цвета, бит на точку
Compression 4 30 Тип компрессии (0 - несжатое изображение)
SizeImage 4 34 Размер изображения, байт
XpelsPerMeter 4 38 Горизонтальное разрешение, точки на метр
YpelsPerMeter 4 42 Вертикальное разрешение, точки на метр
ColorsUsed 4 46 Число используемых цветов (0 - максимально возможное для данной глубины цвета)
ColorsImportant 4 50 Число основных цветов
Таблица цветов (палитра) (ColorTable)
ColorTable 1024 54 256 элементов по 4 байта
Данные изображения (BitMap Array)
Image Size 1078 Изображение, записанное по строкам слева направо и снизу вверх



--------------------------------------------------------------------------------

Листинг 1
unit bmpread; {процедуры для работы с Bmp}
interface
type
  artype = array[0..0]of byte;
  arptr = ^artype;
  bmFileHeader = record {заголовок файла}
    Typf : word;        {сигнатура }
    Size : longint;    {длина файла в байтах}
    Res1 : word;        {зарезервировано}
    Res2 : word;        {зарезервировано}
    OfBm : longint;    {смещение изображения в байтах (1078)}
  end;
  bmInfoHeader = record  {информационный заголовок}
    Size : longint;      {длина заголовка в байтах (40)}
    Widt : longint;      {ширина изображения (в точках)}
    Heig : longint;      {высота изображения (в точках)}
    Plan : word;          {число плоскостей (1)}
    BitC : word;          {глубина цвета (бит на точку) (8)}
    Comp : longint;      {тип компрессии (0 - нет)}
    SizI : longint;      {размер изображения в байтах}
    XppM : longint;      {горизонтальное разрешение}
            {(точек на метр - обычно 0)}
    YppM : longint;      {вертикальное разрешение}
            {(точек на метр - обычно 0)}
    NCoL : longint;      {число цветов}
            {(если максимально допустимое - 0)}
    NCoI : longint;      {число основных цветов}
  end;                 
  bmHeader = record      {полный заголовок файла}
    f : bmFileHeader;    {заголовок файла}
    i : bmInfoHeader;    {информационный заголовок}
    p : array[0..255,0..3]of byte; {таблица палитры}
  end;

  bmhptr = ^bmHeader;

{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr;      {массив с изображением}
                  xim,yim:word;    {размеры}
                  pal:arptr;    {палитра}
                  filename:string); {имя файла}

{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);

implementation

{$R-}

{чтение изображения из Bmp-файла}
procedure ReadBMP(image:arptr; xim,yim:word;
                  pal:arptr; filename:string);
var
  h  : bmHeader;
  i  : integer;
  bmpfile : file;
  s  : longint;
begin
  assign(bmpfile,filename);
  reset(bmpfile,1);
  blockread(bmpfile,h,sizeof(h));  {чтение заголовка}
  for i := 0 to yim-1 do begin    {построчное чтение}
    blockread(bmpfile,image^[(yim-i-1)*xim],xim);
    if (xim mod 4) <> 0 then
      blockread(bmpfile,s,4 - (xim mod 4));
  end;
  close(bmpfile);
  for i ^= 0 to 255 do begin      {преобразование палитры}
    pal^[i*3+2] := h.p[i,0] shr 2; {синий}
    pal^[i*3+1] := h.p[i,1] shr 2; {зеленый}
    pal^[i*3+0] := h.p[i,2] shr 2; {красный}
  end;
end;

{чтение заголовка Bmp-файла}
procedure ReadBMPheader(header:bmhptr;filename:string);
var
  bmpfile:file;
begin
  assign(bmpfile,filename);
  reset(bmpfile,1);
  blockread(bmpfile,header^,sizeof(header^));
  close(bmpfile);
end;

end.



--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
zogman
Дата 31.1.2005, 17:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Можно пожалуйста объяснить для тупых чайников.

(Я более менее понимаю структуру заголвка БМП файла)
НО не понимаю как мне ее извлечь из класса
Graphics::TBitmap *bmp; ??????

ПС

У меня Билдер 97года
я там не вижу ни "bmp->ScanLine[Line_Number]"
ни "Canvas.Lock - Canvas.Unlock". Это я плохо смотрю или
это в новых только ?




  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.