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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение PNG, Как вращать PNG 
:(
    Опции темы
simsmann
Дата 14.9.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

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



Как вращать PNG компоненты для PNG есть но не в одном не нашел вращения.
PM MAIL   Вверх
Alexeis
Дата 14.9.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



simsmann, PNG->BMP->Вращение->PNG. Нема дураков вращать заархивированую картинку 


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

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

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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

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



Что других вариантов нет. НЕ желательно терять качество.
PM MAIL   Вверх
BaD_SeCt0R
Дата 14.9.2008, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Lazy Coder
**


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

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



simsmann, качество при переводе и не теряется. Битмап не имеет сжатия.


--------------------
Кто владеет информацией - владеет миром. (С) Френсис Бэкон.
PM MAIL ICQ   Вверх
simsmann
Дата 14.9.2008, 21:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 75
Регистрация: 26.11.2006

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



А как с прозрачностью при обратной конвертации

Это сообщение отредактировал(а) simsmann - 14.9.2008, 21:49
PM MAIL   Вверх
Alexeis
Дата 14.9.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(simsmann @  14.9.2008,  20:48 Найти цитируемый пост)
А как с прозрачностью при обратной конвертации

  Альфу нужно конвертировать отдельно. Или помещать в альфанал битмапа в формате 32 бита на пиксель smile


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

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

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


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



simsmann, удалось поворочать и не потерять прозрачность?
если да - хотелось бы глянуть на код  smile 


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
AntonN
Дата 28.10.2008, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18




Код

procedure CopyRotateTransparentBrush(_B_in,_B_out: TBitmap; _x,_y,centerX,centerY:integer; trColor:Tcolor; _angle: Double);
const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
type
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;
var cosRadians,_Rad,sinRadians : Double;
  x,y,x_cor,y_cor,x_corS,y_corS,inXOut,inXPr,inXRotated,inYOut,inYPr,inYRotated: Integer;
  RowOut, RowIn: PRGBAArray;
  rc1, bc1, gc1:byte;
  _w,_h:integer;
begin
  _Rad:=_angle; sinRadians:=Sin(_Rad); cosRadians:=Cos(_Rad);
  _w:=_B_in.Width; _h:=_B_in.Height;
  if _x<0 then x_corS:=abs(_x) else x_corS:=0;
  if _y<0 then y_corS:=abs(_y) else y_corS:=0;
  if (_x+_w)>_B_out.Width then x_cor:=_x+_w-_B_out.Width else x_cor:=0;
  if (_y+_h)>_B_out.Height then y_cor:=_y+_h-_B_out.Height else y_cor:=0;
  rc1:=GetRValue(trColor); gc1:=GetGValue(trColor); bc1:=GetBValue(trColor);
  for x:=_h-1-y_cor downto y_corS do begin
    RowIn:=_B_out.Scanline[x+_y]; inXPr:=2*(x-centerY)+1;
    for y:=_w-1-x_cor downto x_corS do begin
      inYPr:=2*(y-centerX)+1;
      inYRotated:=Round(inYPr*CosRadians-inXPr*sinRadians);
      inXRotated:=Round(inYPr*sinRadians+inXPr*cosRadians);
      inYOut:=(inYRotated-1) div 2 + centerX; inXOut:=(inXRotated-1) div 2 + centerY;
      if (inYOut>=0)and(inYOut<=_w-1)and
      (inXOut>=0)and(inXOut<=_h-1) then begin
        RowOut:=_B_in.Scanline[inXOut];
        RowIn[y+_x]:=RowOut[inYOut];
      end;
    end;
  end;
end;


Как пример, оптимизировать еще больше смысла не вижу, проще тогда напряму к данным обращаться в памяти (асм или указатели мучать), для "интерфейсных" операций достаточно, в играх конечно будет подтормаживать.
_x,_y - координаты вывода верхнего левого угла на результирующий битмап, centerX,centerY - центр вращения.
trColor - "прозрачный" цвет, _angle - угол поворота в радианах.

Для повышения качества рекомендую перед поворотом увеличить (просто через canvas.copyrect(), без "качества") исходное изображение (в 2-4 раза) и его повернуть, а потом уменьшить обратно уже повернутое.


--------------------
user posted image
PM MAIL WWW   Вверх
pseud
Дата 29.10.2008, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



trColor - концы не найдены
кроме пустой инициализации:
Код

rc1:=GetRValue(trColor); gc1:=GetGValue(trColor); bc1:=GetBValue(trColor);


прозрачность - имеется ввиду не полная прозрачность одного цвета, а альфа-канал - прозрачность любого пиксела причем любой "силы"

Это сообщение отредактировал(а) pseud - 29.10.2008, 13:50


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
AntonN
Дата 29.10.2008, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



а, ну да, я его почикал для альфы полной, он до этого просто с transparent_color вращал, забыл удалить параметр smile
ну а код вращает с альфой, если что...


--------------------
user posted image
PM MAIL WWW   Вверх
pseud
Дата 29.10.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



что-то ты переоптимизировал или я руки не доточил.
малевич - белый квадрат.


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
AntonN
Дата 29.10.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: 7
Всего: 18



наверное руки.
битмапы должны быть 32 битные.


--------------------
user posted image
PM MAIL WWW   Вверх
pseud
Дата 29.10.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Экспёрт Тыдыщ
***


Профиль
Группа: Завсегдатай
Сообщений: 1175
Регистрация: 18.5.2007
Где: Минск, Беларусь

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



ушел за точилкой


--------------------
Испытание чужого терпения можно считать успешным, если оно лопнуло...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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