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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка текстуры, без TBitmap 
:(
    Опции темы
Alexeis
Дата 10.3.2006, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



К сожалению я с OpenGl ем не знаком поэтому выводил на экран как
мог.
У меня есть заготовленная картинка 200x250 ее я и использовал
("img.bmp")

Код

type
  Trgb = packed record
                 b,g,r : byte
                 end;

  arr = array[1..250,1..200] of Trgb;

procedure TForm1.Button1Click(Sender: TObject);
var
 DC : hDC;
 Bitmap : HBITMAP;
 p : ^arr;        //можно удалить
 i, j : integer;  //можно удалить
 bmInfo: TDIBSection;           // структура BITMAP WinAPI
 W, H : Integer;                 // высота и ширина растра
 bmDIB: hBitmap;                // дискрептор независимого растра
 bmiInfo: BITMAPINFO;           // структура BITMAPINFO WinAPI
 lpBits: PRGBTriple;            // указатели на структуры RGBTRIPLE WinAPI

begin
  DC := Form1.Canvas.Handle; {DC := GetDC(Handle)
                              Handle - окна вывода(или любого)}

  Bitmap := LoadImage(0,
      'IMG.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);
  //создаем независимый растр WxHx24, без палитры, в указателе lpBits получаем    
  //адрес первого байта этого растра. bmDIB - дискрептор растра    
  //заполняем первые шесть членов BITMAPINFO для передачи в GetDIBits    
  bmiInfo.bmiHeader.biWidth:=W;            // ширина    
  bmiInfo.bmiHeader.biHeight:=H;           // высота    
  bmiInfo.bmiHeader.biPlanes:=1;           // всегда 1    
  bmiInfo.bmiHeader.biBitCount:=24;        // три байта на пиксель    
  bmiInfo.bmiHeader.biCompression:=BI_RGB; // без компресси    
  bmiInfo.bmiHeader.biSize:=SizeOf(bmiInfo.bmiHeader); // размер структуры    
  GetDIBits(DC, Bitmap, 0, H - 1, lpBits, bmiInfo, DIB_RGB_COLORS);

  p := Pointer(lpBits); //это мой вариант с выводом на форму

  {здесь должно быть
  result:= Pointer(lpBits)
  вместо
  p := Pointer(lpBits);}

  For i := 1 to 200 do  //Вывод на форму
  for j := 1 to 250 do  //Можно удалить
   form1.Canvas.Pixels[i, 250 - j] := RGB(p^[j,i].r, p^[j,i].g, p^[j,i].b);
end;



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

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

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



Не, не загружает...
Вместо текстур - черное все... Тоесть это значит что текстуры загружены, только всеравно что черный квадрат загрузить...
Попробовал вот так, вообще виснит, хотя вроде все должнобыть так, как в примере с канвасом... smile
Код

function ReadBitmap(const FileName : String;
                    var sWidth, tHeight: GLsizei):pByteArray;
type
Trgb = packed record
                 b,g,r : byte
                 end;
arr = array[1..512,1..512] of Trgb;
var
 DC : hDC;
 Bitmap : HBITMAP;
 bmInfo: TDIBSection;           // ñòðóêòóðà BITMAP WinAPI
 W, H ,i,j: Integer;                 // âûñîòà è øèðèíà ðàñòðà
 bmDIB: hBitmap;                // äèñêðåïòîð íåçàâèñèìîãî ðàñòðà
 bmiInfo: BITMAPINFO;           // ñòðóêòóðà BITMAPINFO WinAPI
 lpBits: PRGBTriple;            // óêàçàòåëè íà ñòðóêòóðû RGBTRIPLE WinAPI
 p : ^arr;
begin
  Bitmap := LoadImage(0,
      PCHAR(FileName),
      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);
  //ñîçäàåì íåçàâèñèìûé ðàñòð WxHx24, áåç ïàëèòðû, â óêàçàòåëå lpBits ïîëó÷àåì
  //àäðåñ ïåðâîãî áàéòà ýòîãî ðàñòðà. bmDIB - äèñêðåïòîð ðàñòðà
  //çàïîëíÿåì ïåðâûå øåñòü ÷ëåíîâ BITMAPINFO äëÿ ïåðåäà÷è â GetDIBits
  bmiInfo.bmiHeader.biWidth:=W;            // øèðèíà
  bmiInfo.bmiHeader.biHeight:=H;           // âûñîòà
  sWidth:=W;
  tHeight:=H;
  bmiInfo.bmiHeader.biPlanes:=1;           // âñåãäà 1
  bmiInfo.bmiHeader.biBitCount:=24;        // òðè áàéòà íà ïèêñåëü
  bmiInfo.bmiHeader.biCompression:=BI_RGB; // áåç êîìïðåññè
  bmiInfo.bmiHeader.biSize:=SizeOf(bmiInfo.bmiHeader); // ðàçìåð ñòðóêòóðû
  GetDIBits(DC, Bitmap, 0, H - 1, lpBits, bmiInfo, DIB_RGB_COLORS);
  p := Pointer(lpBits);
  for i:=0 to 512 do for j:=0 to 512 do begin
  result[i*3+h]:=p^[i,j].r;
  result[i*3+h+1]:=p[i,j].g;
  result[i*3+h+2]:=p[i,j].b;
  end;
end;



--------------------
PM MAIL ICQ   Вверх
DragonFire
Дата 12.3.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 14.8.2005
Где: Москва

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



Я ПОНЯЛ smile smile smile
Извините, я жестко ступил. На самом деле текстуры правильно отображаются при обоих моих способах (см. первую страницу), только при Api-шном способе тектура загружается снизу-вверх, а не сверху-вниз. Решение проблемы - отразить текстуру сверху вниз в пайнте smile
Еще раз извините, за мучения!


--------------------
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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