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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Качественое вращение изображения. 
:(
    Опции темы
Vaskevych
  Дата 6.10.2012, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi Developer



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 30.12.2009
Где: UA. Rovno

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



Помогите с алгоритмом вращения изображения, в частности интересует PNG работаю под XE2.
Всем заранее спасибо.
PM   Вверх
TSerg
Дата 9.10.2012, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Отделите "котлеты от мух".
1. Чтение файла в том или ином формате в bimap.
2. Вращение bitmap.
3. Визуализация bitmap.
4. Запись bitmap в тот или иной формат.

и сразу станет легче.
PM MAIL   Вверх
Illusion Dolphin
Дата 9.10.2012, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

2. Вращение bitmap.

Вот это и требуется в качестве.
Плюсую вопрос.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 9.10.2012, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Illusion Dolphin, а как можно НЕкачественно повернуть битмап? всего-то повернуть массив пикселей...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Illusion Dolphin
Дата 9.10.2012, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

НЕкачественно повернуть битмап

По алгоритму nearest - брать ближайший пиксель к расчётному. Более качественно - делать перерасчёт в зависимости от соседних, т.к. при пересчёте координат получается "точка" между физическими точками. Это актуально при повороте на углы НЕ гратные 90градусам (1,2,5, 0.5 градуса итд). Т.е. типа поворота с antialiasing. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 9.10.2012, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Illusion Dolphin, сорри, как-то в голову не пришло про некратные углы.

Может для облегчения жизни функционалом gdi+ воспользоваться?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Illusion Dolphin
Дата 10.10.2012, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Может для облегчения жизни функционалом gdi+ воспользоваться? 

Да, это один из вариантов, но мне интересно преобразование TBitmap->rotate->TBitmap, а с GDI+ я вижу это:
TBitmap->GdipCreateBitmapFromScan0(думаю быстрее, чем через стрим)->GDIRotate->GdipSaveImageToStream->TBitmap.LoadFromStream - и это много лишних этапов. У меня на входе битмап и на выходе тоже. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MetalFan
Дата 11.10.2012, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Illusion Dolphin, ну если нужно битмап рисовать, то можно тем же gdi+ опять же... и вообще от TBitmap отказаться... будет меньше лишних этапов.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
TSerg
Дата 12.10.2012, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

1. ExLib
cxGraphics.pas

procedure TcxCanvas.RotateBitmap(ABitmap: TBitmap; ARotationAngle: TcxRotationAngle;
  AFlipVertically: Boolean = False);
...
procedure RotateBitmap(Bitmap: TBitmap; Angle: TcxRotationAngle);

2. FastLib

procedure Rotate(Bmp,Dst:TFastRGB;cx,cy:Integer;Angle:Double);
procedure SmoothRotate(Bmp,Dst:TFastRGB;cx,cy:Integer;Angle:Extended);
procedure RotateWrap(Bmp,Dst:TFastRGB;cx,cy:Integer;Angle:Double);
procedure SmoothRotateWrap(Bmp,Dst:TFastRGB;cx,cy:Integer;Degree:Extended);
...
procedure RotateSize(Src,Dst:TFastDIB;Angle:Double);
var
  sInfo: TBMInfo;
  Theta: Double;
begin
  Theta:=Abs(Angle)*(Pi/180);
  sInfo:=Src.Info;
  sInfo.Header.Width:=Round(Abs(Src.Width*Cos(Theta))+Abs(Src.Height*Sin(Theta))+0.4);
  sInfo.Header.Height:=Round(Abs(Src.Width*Sin(Theta))+Abs(Src.Height*Cos(Theta))+0.4);
  Dst.SetSizeIndirect(sInfo);
end;

3. FreeImage

    // rotation and flipping
    function RotateEx(Angle, XShift, YShift, XOrigin, YOrigin: Double; UseMask: Boolean): Boolean;
    function Rotate(Angle: Double): Boolean;
    function FlipHorizontal: Boolean;
    function FlipVertical: Boolean;

4. G32

procedure TAffineTransformation.Rotate(Cx, Cy, Alpha: Single);
var
  S, C: Single;
  M: TFloatMatrix;
begin
  TransformValid := False;
  if (Cx <> 0) or (Cy <> 0) then Translate(-Cx, -Cy);
  Alpha := DegToRad(Alpha);
  S := Sin(Alpha); C := Cos(Alpha);
  M := IdentityMatrix;
  M[0,0] := C;   M[1,0] := S;
  M[0,1] := -S;  M[1,1] := C;
  Matrix := Mult(M, Matrix);
  if (Cx <> 0) or (Cy <> 0) then Translate(Cx, Cy);
end;


и т.д.

Модератор: не забывайте использовать кнопочку код.


Это сообщение отредактировал(а) Alexeis - 12.10.2012, 10:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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