C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Поворот картинки  (Прочитано 1711 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Поворот картинки
« : 27 Март 2014, 13:12:09 »

И еще маленький вопросик  картинка не поворачивается 


int x0,y0;

     Graphics::TBitmap *SrcBitmap  = new Graphics::TBitmap;
     Graphics::TBitmap *DestBitmap = new Graphics::TBitmap;
     SrcBitmap->LoadFromFile("MYPICTURE.bmp");
     DestBitmap->Height = SrcBitmap->Width;
     DestBitmap->Width = SrcBitmap->Height;

     x0 = SrcBitmap->Width/2.;
     y0 = SrcBitmap->Height/2.;

     XFORM xform;
     double angle  = StrToFloat(Form1->Edit1->Text)*M_PI/180.;
     double s = sin(angle);
     double c = cos(angle);
     xform.eM11 = xform.eM22 = c;
     xform.eM12 = s;
     xform.eM21 = -s;

     xform.eDx = x0 - x0*xform.eM11 - y0*xform.eM21;
     xform.eDy = y0 - x0*xform.eM12 - y0*xform.eM22;

     SetGraphicsMode(DestBitmap->Canvas->Handle, GM_ADVANCED);
     SetWorldTransform(DestBitmap->Canvas->Handle,&xform);
     BitBlt(DestBitmap->Canvas->Handle,0,0,DestBitmap->Width,
            DestBitmap->Height, SrcBitmap->Canvas->Handle,
            0,0,SRCCOPY);
     xform.eM11 = xform.eM22 = 1;
     xform.eM12 = xform.eM21 = xform.eDx = xform.eDy = 0;

     Image1->Canvas->Draw(0,0, DestBitmap);

     delete DestBitmap;
     delete SrcBitmap;
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Поворот картинки
« Ответ #1 : 27 Март 2014, 15:11:45 »

я делал с помощью GDI+
https://cbuilder.ru/index.php/topic,8926.0.html
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Поворот картинки
« Ответ #2 : 27 Март 2014, 16:21:16 »

а что это за расширение такое emf
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Поворот картинки
« Ответ #3 : 28 Март 2014, 08:31:14 »

метафайл.. вектор.. Но ровно так же (только тип картинки указывается другой) все делается для растра. Ничего "действенного" изменять не надо.
Мне нужно было именно с файлом работать, но никто не мешает работать с картинкой в памяти.
Если какие вопросы по GDI+ есть, то все аналогичные вопросы новичка я тут задавал, поиском ищется. Также много чего есть по первой строчке из результатов яндекса:
http://www.rsdn.ru/article/gdi/gdiplus1.xml
« Последнее редактирование: 28 Март 2014, 13:27:20 от POV » Записан
gen
Участник


Сказали спасибо: +28/-0
Offline

Сообщений: 52


Re: Поворот картинки
« Ответ #4 : 28 Март 2014, 12:36:53 »

Если используемый код поворота не принципиален, то могу предложить найденный где-то в закромах Инета работающий проект, демонстрирующий поворот с использованием scanline

Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


« Ответ #5 : 30 Март 2014, 09:21:38 »

Ответ такой 
Graphics::TBitmap*b;
    Graphics::TBitmap*b2;

    b=new Graphics::TBitmap;
    b2=new Graphics::TBitmap;

    b2->LoadFromFile("MYPICTURE.bmp");

    //TXForm xf = {1,0,0,1,100,100};
    TXForm xf;
  int x0,y0;
     x0 = Image1->Width/2;
     y0 = Image1->Height/2;
     double angle  = StrToFloat(Form1->Edit1->Text)*M_PI/180.;
     double s = sin(angle);
     double c = cos(angle);
     xf.eM11 = xf.eM22 = c;
     xf.eM12 = s;
     xf.eM21 = -s;
     xf.eDx = x0 - x0*xf.eM11 - y0*xf.eM21;
     xf.eDy = y0 - x0*xf.eM12 - y0*xf.eM22;

    b->Width=200;
    b->Height=200;
 
    SetGraphicsMode(b->Canvas->Handle, GM_ADVANCED);
    SetWorldTransform(b->Canvas->Handle, &xf);
    b->Canvas->Draw(0, 0, b2);
    ModifyWorldTransform(b->Canvas->Handle, &xf, MWT_IDENTITY);
    Image1->Canvas->Draw(0, 0, b);

    delete b;
    delete b2;

Но крутит все равно не важно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.065 секунд. Запросов: 21.