Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как преобразовать bmp в массив, с использованием getDIBits 
V
    Опции темы
Zabava
  Дата 11.6.2009, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



нужно из bmp получить массив, возникли проблемы с функцией GetDiBits, мой массив "mas" остаётся пустой, что я не верно делаю?
Код

var
  DC      : HDC;
  info :TBitmapInfo;
  pic     : TBitMap;
  mas    : array[0..255] of Integer;

...

procedure TForm1.Button1Click(Sender: TObject);
begin
  pic := TBitMap.Create;
  pic.LoadFromFile('picture.bmp');
  DC:=CreateCompatibleDC(0);

  GetDiBits(DC,pic.Handle,0,10,@mas,info,Dib_Rgb_Colors);

PM MAIL   Вверх
Alexeis
Дата 11.6.2009, 20:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459





--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
~FoX~
Дата 11.6.2009, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


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

Репутация: 2
Всего: 68



Zabava, А битмап и так массив...А если вы пытаетесь узнать @mas, так это всего лишь указатель  на буфер с форматом...Если он null, то параметры направляються в  BITMAPINFO, соответственно в info...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Zabava
Дата 13.6.2009, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вопрос в первую очередь к Alexeis, спасибо за ссылки, я воспользовался вашими кусками кода, и вот в чём загвоздка: 
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  PByteArray = ^TByteArray; //байтами будет так
  TByteArray = array[0..214748364] of Byte;
  TRGBColor = packed record
            G, B, R : Byte;
            end;
  PPixelArray = ^TPixelArray; //пикселами так
  TPixelArray = array[0..214748364] of TRGBColor;
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1   : TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 DC : hDC;
 Bitmap : HBITMAP;
 bmInfo: TDIBSection;           // структура BITMAP WinAPI
 W, H : Integer;                 // высота и ширина растра
 bmDIB: hBitmap;                // дискрептор независимого растра
 bmiInfo: BITMAPINFO;           // структура BITMAPINFO WinAPI
 lpBits: PRGBTriple;
 p : PByteArray;
 c : PPixelArray;
 i, j:Integer;            // указатели на структуры RGBTRIPLE WinAPI
begin
  DC := Form1.Canvas.Handle; {DC := GetDC(Handle)
                              Handle - окна вывода(или любого)}
  Bitmap := LoadImage(0,
      '123.bmp',
      IMAGE_BITMAP,
      0,
      0,
      LR_DEFAULTSIZE or
      LR_LOADFROMFILE);
  GetObject(Bitmap, SizeOf(bmInfo), @bmInfo);
  W := bmInfo.dsBm.bmWidth;//ширина
  H := bmInfo.dsBm.bmHeight;//высота
  bmiInfo.bmiHeader.biWidth:=W;            // ширина
  bmiInfo.bmiHeader.biHeight:=H;           // высота
  bmiInfo.bmiHeader.biPlanes:=1;           // всегда 1
  bmiInfo.bmiHeader.biBitCount:=24;        // три байта на пиксель
  bmiInfo.bmiHeader.biCompression:=BI_RGB; // без компрессии
  bmiInfo.bmiHeader.biSizeImage:=0;        // размер не знаем, ставим в ноль
  bmiInfo.bmiHeader.biXPelsPerMeter:=2834; // пикселей на метр, гор.
  bmiInfo.bmiHeader.biYPelsPerMeter:=2834; // пикселей на метр, верт.
  bmiInfo.bmiHeader.biClrUsed:=0;          // палитры нет, все в ноль
  bmiInfo.bmiHeader.biClrImportant:=0;     // то же
  bmiInfo.bmiHeader.biSize:=SizeOf(bmiInfo.bmiHeader); // размер структруы
  bmDIB := CreateDIBSection(DC, bmiInfo, DIB_RGB_COLORS,
  Pointer(lpBits), 0, 0); //создаем аппаратно-независимый растр (секцию DIB) WxHx24, без палитры, в указателе lpBits получаем
  //адрес первого байта этого растра. bmDIB - дискрептор растра
  GetDIBits(DC, Bitmap, 0, H - 1, lpBits, bmiInfo, DIB_RGB_COLORS); //растр преобразуется по адресу lpBits

  p:= Pointer(lpBits); //тут начало растра.
end;

end.

как я понял, p:= Pointer(lpBits); это указатель на первый элемент моего массива чисел, но либо этот массив пустой, либо я не правильно к нему обращаюсь


Это сообщение отредактировал(а) Zabava - 13.6.2009, 17:23
PM MAIL   Вверх
Zabava
Дата 13.6.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



упс, глупая ошибка, просто ссылался не на ту картинку, код оказался рабочий
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

FAQ раздела лежит здесь!


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

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


 




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


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

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