Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2010, 20:03   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Многоуровневое рисование.

Нашел наконец таки рабочую функу поворота, подтесал е под себя.
Код:
procedure DrawRotated(Var T: TTexture; Angle: Real);
var
  TempDC: HDC;
  BmpSize: SIZE;
  Radians: Real;
  Points: array[0..2] of TPoint;
  Xc, Yc: Integer;
  LastDC : HDC;
begin

  TempDC := CreateCompatibleDC(Warehouse.Buffer.DC);
  SelectObject(TempDC, T.Bitmap);
  Radians := Angle * Pi / 180;

  //Находим центр.
  Xc := (T.Width div 2);
  Yc := (T.Height div 2);

  //Считаем координаты.
  Points[0].X := Round((-Xc) * Cos(Radians) - (-Yc) * Sin(Radians) + Xc);
  Points[0].Y := Round((-Yc) * Cos(Radians) + (-Xc) * Sin(Radians) + Yc);

  Points[1].X := Round((T.Width - Xc) * Cos(Radians) - (-Yc) * Sin(Radians) + Xc);
  Points[1].Y := Round((-Yc) * Cos(Radians) + (T.Width - Xc) * Sin(Radians) + Yc);

  Points[2].X := Round((-Xc) * Cos(Radians) - (T.Height - Yc) * Sin(Radians) + Xc);
  Points[2].Y := Round((T.Height - Yc) * cos(Radians) + (-Xc) * Sin(Radians) + Yc);

  //Выводим.
  PlgBlt(Warehouse.Buffer.DC, Points, TempDC, 0, 0, T.Width, T.Height, 0, 0, 0);

  DeleteDC(TempDC);
end;
Есть проблема - Розовый цвет на форме выставлен прозрачным и я картинки с таким цветом отриссовываю через TransparentBlt. А тут картинка с розовым сразу рисуется на экран. Как мне всунуть здесь TransparentBlt?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 11.10.2010, 20:49   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Хм. Попробуйте этот параметр
Цитата:
hbmMask [in]
A handle to an optional monochrome bitmap that is used to mask the colors of the source rectangle.
UPD:
Цитата:
Хм... Создавать еще один битмап по контуру розового цвета?
А что вы удивляетесь? Это ведь не я придумал, MSDN так гласит.

Последний раз редактировалось BOBAH13; 11.10.2010 в 21:02.
BOBAH13 вне форума Ответить с цитированием
Старый 11.10.2010, 20:54   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Хм... Создавать еще один битмап по контуру розового цвета?

Сделал вот так, работает, но может что-то не так?

Код:
PlgBlt(TempDC, Points, TempDC, 0, 0, T.Width, T.Height, 0, 0, 0);
  TransparentBlt(Warehouse.Buffer.DC, 0, 0, T.Width, T.Height, TempDC, 0, 0, T.Width, T.Height, $FF00FF);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многоуровневое меню по данному css коду Vladimirko HTML и CSS 0 26.08.2010 01:11
Рисование Granus Общие вопросы Delphi 2 24.12.2008 07:44
Рисование TriCERATOP Помощь студентам 5 28.11.2008 15:09
MainMenu многоуровневое *Devil* Общие вопросы Delphi 1 18.06.2007 00:05