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

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

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2012, 21:24   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Повернуть изображение

На диске есть графические файлы, в основном bmp, jpg, tiff. Как средствами VBA повернуть их по/против часовой стрелки?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 20.01.2012, 01:59   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Вопрос задан не совсем корректно. В какой среде нужно повернуть файлы ?
В Excel ? И изменённое изображение должно быть возвращено на диск или
остаться на листе ?
Если последнее:
Код:
Selection.ShapeRange.IncrementRotation -90# ' поворачиваем выделенный шейп на 90 градусов против часовой стрелки
Если нужно сохранить изображение на диске то можно:
1) Забрать шейп в ClipBoard
2) Создать Chart объект
3) Вставить изображение в Chart
4) Сохранить Chart
Код:
Set objChart1 = ActiveSheet.ChartObjects.Add(200, 200, 400, 400)
objChart1.Activate
ActiveChart.Paste
ActiveChart.Export Filename:="image.jpg", FilterName:="JPEG"
На самом деле так практически никогда, давно никто не делает.

Начиная с SP1 Windows XP в системе изначально присутствует библиотека
Windows Image Acquisition Automation Layer.
Ссылка на загрузку библиотеки «Windows Image Acquisition Library v2.0» и SDK: Download details: Windows® Image Acquisition Automation Library v2.0 Tool: Image acquisition and manipulation component for VB and scripting

Если поддерживаемых WIA форматов недостаточно - можно воспользоваться бесплатной библиотекой GFL SDK
http://www.xnview.com/en/download_gfl.html

Последний раз редактировалось Aent; 20.01.2012 в 02:31.
Aent вне форума Ответить с цитированием
Старый 20.01.2012, 02:12   #3
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Пример использования WIA:
Код:
Option Explicit

Public Sub DEMOWIA()
     Const wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}"

     Dim objImageFile as Object
     Dim objImageProcess as Object
     Dim strSourcePath as string
     Dim strTargetPath as string

     ' Исходный графический файл:
     strSourcePath = "C:\MyPicture.jpg"
     ' Графический файл с результатом работы:
     strTargetPath = "C:\MyPicture2.bmp"

     Set objImageFile    =  CreateObject("WIA.ImageFile")
     Set objImageProcess = CreateObject("WIA.ImageProcess")

     If Len(Dir(strSorcePath)) = 0 then
           MsgBox "Отсутствует исходный файл"
           exit sub
     End If

     ' Загружаем файл в компонент:
     objImageFile.LoadFile strSourcePath
  
    ' Обрабатываем…
    With objImageProcess
           ' 
           ' Масштабируем:
           ' 
           .Filters.Add .FilterInfos("Scale").FilterID
    
           With .Filters.Item(1).Properties
                 ' Ширина - 800 пикселей
                 .Item("MaximumWidth")  = 800
                 ' Высота - 600 пикселей
                 .Item("MaximumHeight") = 600
           End With
           ' 
           ' Вращаем:
           ' 
           .Filters.Add .FilterInfos("RotateFlip").FilterID
           ' Отразим зеркально по горизонтали
           .Filters.Item(2).Properties.Item("FlipHorizontal") = True
           ' Отразим зеркально по вертикали
           .Filters.Item(2).Properties.Item("FlipVertical")   = True
           ' Повернём на 270 градусов (по часовой стрелке)
           .Filters.Item(2).Properties.Item("RotationAngle")  = 270
    
           ' 
           ' Обрезаем:
           ' 
          .Filters.Add .FilterInfos("Crop").FilterID
    
           With .Filters(3).Properties
           ' Подрежем сверху-снизу
           .Item("Top")    = objImageFile.Width \ 4
           .Item("Bottom") = objImageFile.Width \ 4
           ' Подрежем справа-слева
           '.Item("Left")   = objImageFile.Height \ 10
           '.Item("Right")  = objImageFile.Height \ 10
            End With
            ' 
            ' Конвертируем:
            '
            .Filters.Add .FilterInfos("Convert").FilterID
            ' В bitmap формат
            .Filters.Item(5).Properties.Item("FormatID").Value = wiaFormatBMP
             ' 
            ' Применяем заданные выше фильтры:
            Set objImageFile = .Apply(objImageFile)
            End With

             'WIA не умеет перезаписывать существующий файл, 
            ' потому предварительно удаляем результирующий файл  
            On error resume next
            kill strTargetPath
      
            ' Сохраняем файл:
            objImageFile.SaveFile sTargetPath

Set objImageProcess = Nothing
Set objImageFile    = Nothing
End Sub

Последний раз редактировалось Aent; 20.01.2012 в 02:35.
Aent вне форума Ответить с цитированием
Старый 20.01.2012, 09:39   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Aent Посмотреть сообщение
Вопрос задан не совсем корректно. В какой среде нужно повернуть файлы ?
В Excel ? И изменённое изображение должно быть возвращено на диск или
остаться на листе ?
Спасибо! Очень полезно, буду разбираться.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как повернуть изображение на 180 градусов? kl45gp Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 11.05.2013 13:10
Повернуть изображение и сохранить результат new player Мультимедиа в Delphi 2 03.11.2011 12:57
повернуть изображение и сохранить полученное в файл gvozdkoff Мультимедиа в Delphi 7 14.07.2011 20:32
Как повернуть изображение в TextBox(e)? Diego__ Microsoft Office Word 10 18.08.2009 12:01
Как повернуть изображение в TGraphicControl на 180 градусов? NeonSimfi Win Api 1 06.05.2009 21:20