2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 14:23 
Аватара пользователя


05/06/08
478
Написал некую горбушку, которая выводит в диалоговом окне картинку из байтового буфера
с помощь цикла и нехитрого оператора:

Код:
SetPixel(ps.hdc, x0 + x, y0 + y, RGB(rgb[0], rgb[1], rgb[2]));

Но картинка выводится очень медленно.
Есть ли какой другой оператор, чтобы сразу неформатированный bitmap выгружал одной командой?

Я даже могу создать:
Код:
HBITMAP  bmap = CreateBitmap( X, Y, 3, 8, img);

Вопрос, можно в этом случае пользоваться
Код:
BOOL BitBlt(
  HDC   hdc,
  int   x,
  int   y,
  int   cx,
  int   cy,
  HDC   hdcSrc,
  int   x1,
  int   y1,
  DWORD rop
);

 Профиль  
                  
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 14:39 
Аватара пользователя


29/05/17
808
MGM в сообщении #1440404 писал(а):
Но картинка выводися очень медлено.

DirectX или Vulkan.

-- 19.02.2020, 14:41 --

выводися - лучше писать: выводится
медлено - лучше писать: медленно

 Профиль  
                  
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 14:52 
Аватара пользователя


05/06/08
478
Как лучше писать по-русски, это понятно.
Исправлю. Но повторю вопрос, для простенькой горбушки можно ли заменить SetPixel на BitBlt.
Так как DirectX - это немного не то.
В принципе, могу проверить сам.
Спасибо за ответ.

 Профиль  
                  
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 18:09 


15/11/15
1081
Что то типа
Код:
Image1.Picture.Assign(Bitmap1); ?

 Профиль  
                  
 
 Примеры программ
Сообщение19.02.2020, 18:10 
Аватара пользователя


10/10/18
756
At Home
MGM в сообщении #1440410 писал(а):
можно ли заменить SetPixel на BitBlt.

Вот примеры моих программ, где я именно это и делаю. VC6 (VS98).

Попроще: http://old-dos.ru/files/file_3785.html
Посложнее: http://old-dos.ru/files/file_4010.html

 Профиль  
                  
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 19:09 
Аватара пользователя


05/06/08
478
gevaraweb в сообщении #1440439 писал(а):
Что то типа
Код:
Image1.Picture.Assign(Bitmap1); ?


Честно говоря, я как бы нашел аналог:
Код:
   HBITMAP  bmap = CreateBitmap(X, Y, 1, 24, img);
   BOOL  rz = BitBlt(ps.hdc, x0, y0, X,Y, ps.hdc, int x1=0, int y1 = 0, WORD rop  = SRCCOPY);

Проблема в том, что я не понимаю, как эти две проги взаимодействуют.
Указатель img это, судя по описанию то, что должно как бы тупо копироваться.

Рисует черный квадрат независимо от содержимого img ни до создания CreateBitmap, ни после.
Короче, чтобы пользоваться этим говном, надо долго и углубленно изучать примеры и всякие контекстуальные устройства. Короче, мрак.

 Профиль  
                  
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 20:37 
Аватара пользователя


05/06/08
478
Если кому интересно, проблему решил.
Код:
       HBITMAP  bmap = CreateBitmap(X, Y, 1, 32, img);
   HDC hdcMem = CreateCompatibleDC(ps.hdc);
   SelectObject(hdcMem, bmap);
   BOOL  rz = BitBlt(ps.hdc, x0, y0, X, Y, hdcMem, 0, 0, SRCCOPY);
   DeleteObject(bmap);

Затык был в стуктуре буфера BYTE *img.
В этом буфере должно быть 4 байта цвета пиксела подряд. Три не берет. Значение альфы 0.
Всем спасибо.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group