Как быстро рисовать bmp в перспективе без OpenGL и DirectX

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Как быстро рисовать bmp в перспективе без OpenGL и DirectX

Сообщение Sheleh » 08.12.2010 21:47:51

Решил полностью отказаться от TLazIntfImage. Метод CreateDIBSection работает куда быстрее, теперь уже совсем исчезли тормоза с отрисовкой.
Оформил писанину с инициализацией в виде маленькой функции:
function GetDIBPointer(BitMap: TBitmap): Pointer;
var BInfo: TBitmapInfo;
begin
BInfo.bmiHeader.biSize := sizeof(BitmapInfo.bmiHeader);
BInfo.bmiHeader.biWidth := BitMap.Width;
BInfo.bmiHeader.biHeight := -BitMap.Height;
BInfo.bmiHeader.biPlanes := 1;
BInfo.bmiHeader.biBitCount := 32;
BInfo.bmiHeader.biCompression := BI_RGB;
BitMap.Handle := CreateDIBSection(BitMap.Canvas.Handle, BInfo, DIB_RGB_COLORS, GetDIBPointer, 0, 0);
//ZeroMemory(DIBPointer, Width * Height * 4);//раскоментировать, если надо обнулить биты рисунка
end;


Ну и собственно пример работы:
type
TBig = array[0..0] of Integer;

var bmp: Tbitmap;
bmpPointer: TPointer;

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
bmp:=TBitMap.Create();
bmp.width:=form1.width;
bmp.height:=form1.height;
bmpPointer:=GetDIBPointer(bmp);
Timer1.interval:=1;
end;

TForm1.Timer1Timer(Sender: TObject);
var x,y: integer;
begin
for x:=0 to bmp.width-1 do
for y:=0 to bmp.height-1 do // Цветной шум
TBig(bmpPointer^)[x+ y * bmp.width] := RGB(random(255),random(255),random(255));
form1.canvas.draw(0,0,bmp);
end;


Но вот беда, при компиляции в WinCE на экране ничего не происходит. Что не так? Функция CreateDIBSection в WinCE API присутствует.

Добавлено спустя 8 часов 27 минут 18 секунд:
А нет, где то у меня была ошибка. В wince все так же работает.
Sheleh
новенький
 
Сообщения: 24
Зарегистрирован: 12.11.2010 18:31:07

Re: Как быстро рисовать bmp в перспективе без OpenGL и DirectX

Сообщение .wOvAN » 09.12.2010 17:55:26

в onpaint formы есть вызов (form1.canvas.draw(0,0,bmp);)?
.wOvAN
постоялец
 
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12

Re: Как быстро рисовать bmp в перспективе без OpenGL и DirectX

Сообщение Sheleh » 10.12.2010 04:51:58

.wOvANНет
Sheleh
новенький
 
Сообщения: 24
Зарегистрирован: 12.11.2010 18:31:07

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 29

Рейтинг@Mail.ru