Что нового

Сохранение матрицы - в файл экселя

mv6677

Новичок
Сообщения
105
Репутация
0
Добрый вечер, мастера программирования на автоит.
Помогите новичку.

У меня есть скрипт, анализирующий цвета картинки - и создающий числовую матрицу.
Как сохранить эту матрицу - в закрытый файл 1.xls (начиная с ячейки A1) ?
Код:
#include <GDIPlus.au3>

$sImage = @ScriptDir & "\1.jpg"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sImage)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Global $iIndex, $iSize = $iWidth * $iHeight, $aPixels[$iHeight][$iWidth]
$tBits = DllStructCreate("dword[" & $iSize & "]")
_WinAPI_GetBitmapBits($hBitmap, 4 * $iSize, DllStructGetPtr($tBits))
For $i = 0 To $iHeight - 1
  For $j = 0 To $iWidth - 1
    $iIndex += 1
    $iColor = DllStructGetData($tBits, 1, $iIndex)
    $iRed = BitAND(BitShift($iColor, 16), 0xFF)
    $iGreen = BitAND(BitShift($iColor, 8), 0xFF)
    $iBlue = BitAND($iColor, 0xFF)
    If $iRed > 150 And $iGreen < 70 And $iBlue < 70 Then
      $aPixels[$i][$j] = 1
    Else
      $aPixels[$i][$j] = 0
    EndIf
  Next
Next
_WinAPI_DeleteObject($hBitmap)

#include <Array.au3>
_ArrayDisplay($aPixels)
 

Вложения

  • 1.rar
    3.3 КБ · Просмотры: 2

gunter123

Продвинутый
Сообщения
159
Репутация
69
Добавьте в конце
Код:
...
#include <Array.au3>
#include <Excel.au3>

Local $oExcel = _Excel_Open()
$oExcel.visible = false
Local $oBook = _Excel_BookOpen($oExcel, @ScriptDir & "\Файл.xlsx")
If @error Then Exit MsgBox(4096, "Ошибка!", "Ошибка?")
_Excel_RangeWrite($oBook, $oBook.Activesheet, $aPixels)
_Excel_BookSave($oBook)
_Excel_Close($oExcel)
 
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
gunter123 , подскажите - как сделать так, чтобы скрипт не открывал всякий раз - эксель на весь экран, а просто записывал в файл 1.xlsx - цифры ?

(Поскольку у меня скрипт рассчитан на срабатывание - каждые 30 секунд.
И такое постоянное разворачивание экселевского файла на весь экран - просто парализует работу)

Сейчас - скрипт открывает эксель, выделяет окно экселя - и это окно - не закрывается.
Код:
#include <GDIPlus.au3>
#include <Array.au3>
#include <Excel.au3>

$sImage = @ScriptDir & "\1.jpg"

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sImage)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Global $iIndex, $iSize = $iWidth * $iHeight, $aPixels[$iHeight][$iWidth]
$tBits = DllStructCreate("dword[" & $iSize & "]")
_WinAPI_GetBitmapBits($hBitmap, 4 * $iSize, DllStructGetPtr($tBits))
For $i = 0 To $iHeight - 1
  For $j = 0 To $iWidth - 1
    $iIndex += 1
    $iColor = DllStructGetData($tBits, 1, $iIndex)
    $iRed = BitAND(BitShift($iColor, 16), 0xFF)
    $iGreen = BitAND(BitShift($iColor, 8), 0xFF)
    $iBlue = BitAND($iColor, 0xFF)
    If $iRed > 150 And $iGreen < 70 And $iBlue < 70 Then
      $aPixels[$i][$j] = 1
    Else
      $aPixels[$i][$j] = 0
    EndIf
  Next
Next
_WinAPI_DeleteObject($hBitmap)

#include <Array.au3>
_ArrayDisplay($aPixels)

Local $oExcel = _Excel_Open()
$oExcel.visible = false
Local $oBook = _Excel_BookOpen($oExcel, @ScriptDir & "\1.xlsx")
If @error Then Exit MsgBox(4096, "Ошибка!", "Ошибка?")
_Excel_RangeWrite($oBook, $oBook.Activesheet, $aPixels)
_Excel_BookSave($oBook)
_Excel_Close($oExcel)
 

Вложения

  • 1.rar
    10 КБ · Просмотры: 1
Автор
M

mv6677

Новичок
Сообщения
105
Репутация
0
Понял.
Спасибо за важное уточнение.
 
Верх