AutoHotKey를 사용하는 사람들
오늘: 496
어제: 547
전체: 199,693
회원: 1,877
접속: 30 (회원 1)

AutoHotKey 스크립트 공유

 

AutoHotkey로 제작한 스크립트를 서로 공유하기 위한 공간 입니다. 자유롭게 이용하세요~

 
작성일 : 10-02-05 20:55
BMP 파일의 Width, Height 구하기.
 글쓴이 : ImMBRLv.62
조회 : 647   추천 : 0   비추천 : 0  

스크립트에 대한 설명:

제목 그대로 BMP 포맷 이미지 파일의 폭과 높이를 구해주는 스크립트입니다.
JPG 포맷까지 포함시켜 보려고 했지만 능력부족이라서 여기서 포기합니다;;;

<--------------------------------------------- AHK 스크립트 내용 --------------------------------------------->

FileSelectFile,file,,%A_WorkingDir%,,*.bmp
res:=BinRead(file,data,2,0)
if data=424D
{
gosub,bmp
}
else
{
msgbox,error!!
}
return

bmp:
res:=BinRead(file,wid1,1,19)
res:=BinRead(file,wid2,1,18)
res:=BinRead(file,hei1,1,23)
res:=BinRead(file,hei2,1,22)
wid=0x%wid1%%wid2%
hei=0x%hei1%%hei2%
SetFormat,integer,d
wid+=0
hei+=0
SetFormat,integer,hex
msgbox,BMP`nwidth=%wid%`nheight=%hei%
return


/* ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BinRead ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|  - Open binary file
|  - Read n bytes (n = 0: all)
|  - From offset (offset < 0: counted from end)
|  - Close file
|  data (replaced) <- file[offset + 0..n-1]
|  Return #bytes actually read
*/ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

BinRead(file, ByRef data, n=0, offset=0)
{
  h := DllCall("CreateFile","Str",file,"Uint",0x80000000,"Uint",3,"UInt",0,"UInt",3,"Uint",0,"UInt",0)
  IfEqual h,-1, SetEnv, ErrorLevel, -1
  IfNotEqual ErrorLevel,0,Return,0 ; couldn't open the file

  m = 0                            ; seek to offset
  IfLess offset,0, SetEnv,m,2
  r := DllCall("SetFilePointerEx","Uint",h,"Int64",offset,"UInt *",p,"Int",m)
  IfEqual r,0, SetEnv, ErrorLevel, -3
  IfNotEqual ErrorLevel,0, {
      t = %ErrorLevel%              ; save ErrorLevel to be returned
      DllCall("CloseHandle", "Uint", h)
      ErrorLevel = %t%              ; return seek error
      Return 0
  }

  TotalRead = 0
  data =
  IfEqual n,0, SetEnv n,0xffffffff ; almost infinite

  format = %A_FormatInteger%      ; save original integer format
  SetFormat Integer, Hex          ; for converting bytes to hex

  Loop %n%
  {
      result := DllCall("ReadFile","UInt",h,"UChar *",c,"UInt",1,"UInt *",Read,"UInt",0)
      if (!result or Read < 1 or ErrorLevel)
        break
      TotalRead += Read            ; count read
      c += 0                        ; convert to hex
      StringTrimLeft c, c, 2        ; remove 0x
      c = 0%c%                      ; pad left with 0
      StringRight c, c, 2          ; always 2 digits
      data = %data%%c%              ; append 2 hex digits
  }

  IfNotEqual ErrorLevel,0, SetEnv,t,%ErrorLevel%

  h := DllCall("CloseHandle", "Uint", h)
  IfEqual h,-1, SetEnv, ErrorLevel, -2
  IfNotEqual t,,SetEnv, ErrorLevel, %t%

  SetFormat Integer, %format%      ; restore original format
  Totalread += 0                  ; convert to original format
  Return TotalRead
}

비추천 : 0
추천 : 0
MBR is not Master Boot Record.

       eocndLv.13 / 2010-02-05 21:09

헐..
장난이아니군.. 어디보자 ;;
ㅠㅠㅠㅠㅠㅠㅠㅠ

       NewJungLv.12 / 2010-02-05 23:09

ImMBR님은 C언어도 경험이 많으신 것 같군요.
너무 멋있네요.^^

제가알기로 Windows API가 C언어 기반으로 만들어져
있어서 C언어에 대한 지식이 없이는 API Function들을
AHK에 접목시키기가 쉽지 않을 텐데요.

저도 처음엔 AHK가 DllCall을 통하여 API Function들을
사용할 수 있다는 것을 알고 매우 기뻤습니다.
그러나 기쁨도 잠시더군요.
Windows API의 방대한 양의 Function들 중에서 제가
필요로 하는 Function이 어떤 Function들인지 알아내기도
쉽지 않지만, 막상 알아내도 AHK의 문법에 맞게 고쳐서
사용한다는 게 여간 까다롭지 않네요.

그래도 Windows OS에서 사용하는 Function들을
AHK에서 사용할 수 있다는 것 자체가, AHK의
너무나 큰 매력이고, 그 이유 때문에 제 개인적인
생각이지만 AHK가 단순한 Script 언어 보다는
Programming 언어 쪽에 더 가깝다고 생각합니다.

오히려 단순한 프로그램을 제작할 때는
다른 Programming 언어보다 비교적 단순한
문법을 사용하는 AHK가 다른 Programming
언어보다 훨씬 효율적인 것 같네요.

아무튼 ImMBR님 덕분에 많이 배우고 갑니다.

      답변글

       ImMBRLv.62 / 2010-02-06 21:35

저도 공식 홈페이지에서 퍼오는 것이 대부분입니다.
C언어는 당연히 모른답니다;;;


 
 

 
Total 144
번호 제   목 글쓴이 날짜 조회 추천 비추천
[영문포럼] SciTE4 AutoHotKey v2 - AHK 스크립팅 편집기 (11) 관리자Lv.100 03-18 2279 0 0
144 문자열>16진수>문자열 (3) 만약에Lv.6 08-25 212 1 0
143 창 이동 스크립트2 (3) AHsK현수Lv.10 08-06 438 0 0
142    창 이동 스크립트2 (5) 샤이닝Lv.2 08-06 279 0 1
141 휠로 마우스 속도 조절하기 (2) 운장Lv.17 08-21 175 1 0
140 한글 자소별로 분리 또는 합치기 (4) 운장Lv.17 08-17 218 3 0
139 네이버로그인 및 카페등급 인증소스 (1) RextenLv.1 08-17 303 0 0
138 마우스, 키보드 레코더 (8) eocndLv.13 08-16 432 0 0
137 컨트롤(ClassNN)내의 좌표구하기 (4) DRAGONLv.14 08-11 309 1 0
136 분 단위로 윈도우 자동종료 (1) 제트나비Lv.4 08-10 240 1 0
135 원하는 Window를 투명화시키자!? (3) AHsK현수Lv.10 08-10 346 1 0
134 save images from clipboard (2) ImMBRLv.62 08-08 271 1 0
133 퍼온글: 마우스 오작동 방지 ~ (1) 만약에Lv.6 08-07 366 0 0
132 exe 파일을 ahk 파일로 변환 (디컴파일러) (9) 만약에Lv.6 08-02 745 3 0
131 스크립트 작성을 쉽게~ 템플릿(파라미터 추가) 만약에Lv.6 08-02 426 0 0
130 마우스 제스처에 옷입혔어요 :) (13) 만약에Lv.6 07-29 495 1 0
 
 
 1  2  3  4  5  6  7  8  9  10  

 

Copyright Tleap. All rights reserved.