2014 dxdy logo

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

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




 
 Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 14:23 
Аватара пользователя
Написал некую горбушку, которая выводит в диалоговом окне картинку из байтового буфера
с помощь цикла и нехитрого оператора:

Код:
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 
Аватара пользователя
MGM в сообщении #1440404 писал(а):
Но картинка выводися очень медлено.

DirectX или Vulkan.

-- 19.02.2020, 14:41 --

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

 
 
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 14:52 
Аватара пользователя
Как лучше писать по-русски, это понятно.
Исправлю. Но повторю вопрос, для простенькой горбушки можно ли заменить SetPixel на BitBlt.
Так как DirectX - это немного не то.
В принципе, могу проверить сам.
Спасибо за ответ.

 
 
 
 Re: Есть ли возможность в Windows (среда VC) ускорить рисование
Сообщение19.02.2020, 18:09 
Что то типа
Код:
Image1.Picture.Assign(Bitmap1); ?

 
 
 
 Примеры программ
Сообщение19.02.2020, 18:10 
Аватара пользователя
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 
Аватара пользователя
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 
Аватара пользователя
Если кому интересно, проблему решил.
Код:
       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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group