Chip123 科技應用創新平台
標題:
關於BMP轉logo
[打印本頁]
作者:
Butler99
時間:
2021-5-7 10:16 AM
標題:
關於BMP轉logo
請問大家layout logo是怎麽做得,感覺BMP 單色位轉成layout效果不好,如果采用這個方法要每個字母做成一個cell,然後還要load一個可以自動縮放的script,而且轉成單色位圖片會有很嚴重的毛邊,轉出來會很難看,所以是怎麽做比較好
: f4 l$ n* Q2 o% T/ j& _
3 R6 W( e* }5 {+ }. _( J- o
以下是skill
- ^: {8 p8 M0 M" M
let((win cv bmpfile bmpSize WORD Wnum number Grid Layer row column max_column
/ q$ T5 n5 L' f# N$ N
i dot x y signature offset width height pixel ImageSize )
$ ]0 u5 X7 Q8 u2 g8 V" m$ T
) o, e, o7 x/ h) `7 U0 w
win = hiGetCurrentWindow()
+ G) T$ \7 S# x' O6 k
cv = getEditRep(win)
' w; l g! G& k; j& [
+ w7 T* ~) t+ m4 U
bmpfile = "~/number_mini.bmp" ;;; Input BMP File
m- x: \8 D! L# Q, ~7 z
Layer = list("TTOPME" "drawing") ;;; Output Layer
7 }- h# X& I6 O m+ n# n. W
Grid = 1 ;;; Rectangle Size
5 q2 x+ C. e: }5 p# s4 P8 r
column = 0
) i* `6 E/ F7 Y( E$ j
) ~) B' b8 i; e! X4 O9 {5 a8 W
procedure(MessageForm(text)
& Q( Q% _3 O% y' `! E
prog( ()
+ r8 r3 w. p8 `6 w2 C
hiDisplayAppDBox(
% W' I& f3 x- S- a
?name 'JWDBox_Message
4 K- r0 B! n7 T8 L0 S$ s: C
?dboxBanner "Message!!"
% u R$ I# t3 F9 S# g) \
?buttonLayout 'Close
4 w# u+ L6 K0 }* Q
?dboxText text
% ?& o3 v( m% D: k, j6 _
)
( n; j: e! U( f( B+ m2 P( L; z
);prog
0 h2 F2 A: h4 M
);procedure
6 B2 e' L# o6 p1 x' ]* O
+ q( D& ^7 f* ~+ o
;Read BMP file
/ Z' Y& n; a6 S' g' [$ X
if(InFile = infile(bmpfile) then
3 m/ ]8 ^3 F7 j$ j/ m/ X) {
bmpSize = fileLength(bmpfile)
7 }8 N" n% t! W; D+ |! _6 O0 c4 ]
declare(WORD[bmpSize])
/ |$ v1 R) X6 _5 A0 q
for(Wnum 0 bmpSize-1 WORD[Wnum] = charToInt(getc(InFile)) )
$ {; t( U E3 d) k
close(InFile)
0 F. U* {: Q. |$ k( @3 h$ k$ {. h& B
else
. j9 E8 h. G3 \ Z Y% m& ~
MessageForm("Input file does not exist!")
- ?9 c% ~# R3 t& R' m+ h
return()
. C7 `0 C2 l' V9 h" `( F5 s6 _
)
) z; a3 f9 a5 D2 T" y
3 [: x8 b# y6 Z
sprintf(signature "%02x%02x" WORD[0] WORD[1])
! ?) l4 T' U9 b
offset = (WORD[0x0d]<<24) + (WORD[0x0c]<<16) + (WORD[0x0b]<<8) + WORD[0x0a]
7 A: F8 a6 W; N) o- L) j" R' f
width = (WORD[0x15]<<24) + (WORD[0x14]<<16) + (WORD[0x13]<<8) + WORD[0x12]
( i5 ~( W4 s/ S4 F) y& L4 c
height = (WORD[0x19]<<24) + (WORD[0x18]<<16) + (WORD[0x17]<<8) + WORD[0x16]
) ^. x0 M; f0 q! K8 a
pixel = (WORD[0x1d]<<8) + WORD[0x1c]
2 z I$ q/ _4 j# M' |' \
ImageSize = (WORD[0x25]<<24) + (WORD[0x24]<<16) + (WORD[0x23]<<8) + WORD[0x22]
& v6 A: a& X4 X( u4 q. _
& S+ L9 H4 h5 `2 `! ~5 h* o1 `0 T
printf("--- BMP2LAY Start --- %L\n" getCurrentTime())
5 Q$ `" y1 U* S7 {% [ Y( Y+ t
printf("offset : 0x%x \n" offset)
+ A6 J, Z2 A, |5 n% U+ ?
printf("width : 0x%x \n" width)
8 w3 y. v* s$ [4 X8 Q7 q0 g
printf("height : 0x%x \n" height)
A; k4 @9 T( E6 Y
printf("ImgSize : 0x%x \n" ImageSize)
q7 q3 A0 c8 H5 [
& S0 n; J' [( S& Z* f+ S
;check bmp file
7 K L9 \& F4 @
if(!equal(signature "424d") then
, i% t; @. l7 r' K* X6 E! `+ U
MessageForm("*ERROR* Standard Input is not a BMP file")
) W! S3 W) u j' p
return()
' M9 H% O3 k$ _! Q
)
# w Y- g. F+ l5 q" m7 J3 g; X4 R
, {. R, ?8 ^5 W1 P/ c; v7 U
;check mono bmp file
4 ]1 R, M) e, x: N
if(!equal(pixel 0x01) then
4 X F! l" M# H* `, L
MessageForm("*ERROR* only supports mono bmp files")
3 U1 J9 k8 a( ~3 W |
return()
( M0 s9 i e" p& }3 X: v
)
* O* K! U8 V) M9 s% a! G
* h5 f' X' F' F5 C7 V
;BMP2LAY
2 H2 t8 {% L: s. k5 h8 `
max_column = ImageSize/height<<3
. s6 u/ R+ D' W, Z
number = offset+ImageSize-1
+ E3 K0 w1 U3 j C3 s
2 q j# h; a6 O. I$ L' B1 z& }
for(Wnum offset number
: a1 U1 b# b" j$ @ E+ ]! L
row = fix((Wnum-offset)/(max_column>>3))
) ]/ K U& v) j, t+ @4 c$ c# a
y = Grid*row
8 Z5 T$ M3 j5 a" O* j/ u& ~/ ?
i) X/ ^3 Z- q. i+ A
for(i 0 7
4 N) c; F, m* v: L( ?6 W
dot = bitfield1(WORD[Wnum] 7-i) ; bit<7> ~ bit<0>
. ~! @6 P- W, ^. R
x = Grid*column
4 |& J: I: h, `* I! F$ g, p
if(zerop(dot) && column<width then
; |6 Y2 F. c1 o( Q u
geSelectObject(dbCreateRect(cv Layer list(x:y x+Grid:y+Grid)))
" _2 @- B9 P: H9 M `9 b, J
)
$ T4 j/ `2 Q4 D9 x
column++
& h. H) U9 a- @! @) ?
);for
% D! e0 F: S0 r& Y* u- F
if(equal(column max_column) column=0)
0 ^% l8 L7 ^2 O3 p
Wnum++
' _$ }" a& P5 K9 u: Z- n/ x
);for
+ c9 O% D7 _5 Z+ @5 D2 R1 {
) J. ~* D# X# [/ C/ V t
hiZoomIn(win list(-10:-10 x+10:y+10))
& G; P3 k/ A+ W+ p% @; _
printf("--- BMP2LAY End ----- %L\nt\n" getCurrentTime())
( ?2 X4 i; W/ c4 S y
);let
& E; d2 M1 |+ v" z ]
7 r6 l/ M+ S* p& h3 u S
歡迎光臨 Chip123 科技應用創新平台 (http://free.vireal.world/chip123_website/innoingbbs/)
Powered by Discuz! X3.2