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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изображение и WinAPI 
:(
    Опции темы
Borland_Delphi_6
  Дата 3.7.2004, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



Решил попробовать написать что-нибудь на WinAPI. Форму создавать научился. Не подскажите ли, как теперь нарисовать на форме картинку из файла?


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
maxim1000
Дата 3.7.2004, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



как-то надо было вывести картинку в консольном приложении, написал вот это (правда не на Delphi, а в VC, но это же WinAPI smile.gif )
Код
#define IMAGE_WIDTH   200
#define IMAGE_HEIGHT  150
#define WINDOW_WIDTH  (IMAGE_WIDTH+10)
#define WINDOW_HEIGHT (IMAGE_HEIGHT+30)

void LoadBMP(char * FileName,unsigned char *Destination,int Index)
{
 HBITMAP bmp;
 int x,y;
 HDC dc;
 int pixel;
 
 bmp=(HBITMAP)LoadImage(0,FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
 dc=CreateCompatibleDC(0);
 SelectObject(dc,bmp);
 //for(y=IMAGE_HEIGHT*Index;y<IMAGE_HEIGHT*Index+IMAGE_HEIGHT;y++)
 for(y=Index;y<Index+IMAGE_HEIGHT;y++)
 {
   for(x=0;x<IMAGE_WIDTH;x++)
   {
     pixel=GetPixel(dc,x,y);
     *(Destination++)=GetRValue(pixel);
     *(Destination++)=GetGValue(pixel);
     *(Destination++)=GetBValue(pixel);
   }
 }
 DeleteDC(dc);
 DeleteObject(bmp);
}
HWND WindowForBMP;
void CreateBMPWindow()
{
 WindowForBMP=CreateWindow("STATIC","image",SS_BITMAP,0,0,WINDOW_WIDTH,WINDOW_HEIGHT,0,0,0,0);
}
void ShowBMP(unsigned char *Image)
{
 HDC windowdc,memorydc;
 int x,y;
 short r,g,b;
 
 SetWindowPos(WindowForBMP,HWND_TOPMOST,300,300,WINDOW_WIDTH,WINDOW_HEIGHT,SWP_SHOWWINDOW | SWP_NOACTIVATE);
 windowdc=GetDC(WindowForBMP);
 memorydc=CreateCompatibleDC(windowdc);
 for(y=0;y<IMAGE_HEIGHT;y++)
 {
   for(x=0;x<IMAGE_WIDTH;x++)
   {
     r=*(Image++);
     g=*(Image++);
     b=*(Image++);
     SetPixel(windowdc,x,y,RGB(r,g,b));
   }
 }
 DeleteDC(memorydc);
 ReleaseDC(WindowForBMP,windowdc);
}

только не надо ругать меня за использование SetPixel - просто лень было разбираться с функциями типа GetDIBits
да и вообще все это написано на скорую руку...


--------------------
qqq
PM WWW   Вверх
Borland_Delphi_6
  Дата 3.7.2004, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



maxim1000
Спасибо конечно, но т.к. я VС в глаза не видел... sad.gif

Это сообщение отредактировал(а) Borland_Delphi_6 - 3.7.2004, 23:01


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
maxim1000
Дата 4.7.2004, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Спасибо конечно, но т.к. я VС в глаза не видел...

а вся суть в том, какие функции и с какими параметрами вызывать, а синтаксис вызова функции на C и Delphi довольно-таки похож...
а вообще для изучения WinAPI C очень не помешал бы
у меня у самого к Delphi довольно теплые чувства, но когда дело касается WinAPI тут я безоговорочно перехожу на C: все примеры обычно приводятся на нем...
---
ну, если попытаться переписать, получится что-то вроде этого:
Код
program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils,
 windows;
var
 WindowForBMP: HWND;
 bmp: HBITMAP;
 windowdc,memorydc:HDC;
begin
 WindowForBMP:=CreateWindow('STATIC','image',SS_BITMAP,0,0,210,180,0,0,0,0);
 bmp:=LoadImage(0,'qqq.bmp',IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
 SetWindowPos(WindowForBMP,HWND_TOPMOST,300,300,210,180,
              SWP_SHOWWINDOW or SWP_NOACTIVATE);
 windowdc:=GetDC(WindowForBMP);
 memorydc:=CreateCompatibleDC(windowdc);
 SelectObject(memorydc,bmp);
 BitBlt(windowdc,0,0,200,150,memorydc,0,0,SRCCOPY);
 DeleteDC(memorydc);
 ReleaseDC(WindowForBMP,windowdc);
 while true do;
end.



--------------------
qqq
PM WWW   Вверх
Borland_Delphi_6
Дата 4.7.2004, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



maxim1000
Спасибо, попробую. Просто мне надо одну прогу на API написать, что бы она маленькая и шустрая была.


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
Borland_Delphi_6
Дата 4.7.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



maxim1000
Спасибо еще раз, уже кое-что получается biggrin.gif
Только я вот не пойму, зачем эта строчка:
Цитата
while true do;

Она привела мою прогу к зависанию, без нее все работает хорошо... smile.gif


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
maxim1000
Дата 4.7.2004, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата
Только я вот не пойму, зачем эта строчка:
Цитата
while true do;

Она привела мою прогу к зависанию, без нее все работает хорошо...

когда консольное приложение закрывается, окно, которое оно создало уничтожается
цикл в конце предназначен, чтобы можно было успеть что-нибдуь увидеть
а когда надоест смотреть - Ctrl-C


--------------------
qqq
PM WWW   Вверх
Borland_Delphi_6
Дата 4.7.2004, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



maxim1000
Ааа... Понятно. Просто я то твой код в неконсольное вставил smile.gif Но имхо, вместо цикла лучше юзать sleep(), т.к. такой цикл больше похож на глюк в программе smile.gif


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
RA
Дата 5.7.2004, 03:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Вообще разрабатывать визуальные программы на вин апи это очень геморно, но если уж позарез нужен маленький размер приложения то можно написать его используя компонеты Kol и MCK
http://bonanzas.rinet.ru
PM   Вверх
dm9
Дата 5.7.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

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



RAdmin, да нет, для саморазвития полезно очень даже smile.gif Чтобы понять, как оно работает.
PM MAIL ICQ   Вверх
Borland_Delphi_6
Дата 5.7.2004, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



maxim1000
А ты не подскажешь, как по событию таймера мне перерисовать пикчур? Таймер у меня уже есть.


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
dm9
Дата 5.7.2004, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

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



Borland_Delphi_6, я ж тебе пример кидал. Смотри что там написано на обработке WM_PAINT. Подумать самому и почитать справочку тоже иногда полезно smile.gif

PM MAIL ICQ   Вверх
Borland_Delphi_6
Дата 6.7.2004, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



dm9
Уже думал, так нифига не вышло sad.gif Лано, еще подумаю...


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

Мои фотографии
PM MAIL WWW   Вверх
RA
Дата 6.7.2004, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



Вообще из кода Maxi1000 надо убрать строчку
Код
{$APPTYPE CONSOLE}
и тогда всё поедет.
PM   Вверх
Borland_Delphi_6
Дата 6.7.2004, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


LoneLINEss
****


Профиль
Группа: Участник Клуба
Сообщений: 2509
Регистрация: 5.11.2002
Где: in fortune dreams ...

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



RAdmin
Да я понимаю, не дурак smile.gif У меня и так все "едет", у меня щас немного другая проблема sad.gif


--------------------
Blind Guardian Fan :: BMSTU Student :: A polar bear is a rectangular bear after a coordinate transform.

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

Запрещено:

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

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

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

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


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

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


 




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


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

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