mirror of
https://github.com/go-vgo/robotgo.git
synced 2025-05-31 06:13:55 +00:00
Update and move image function to img.go
This commit is contained in:
parent
debdcc31d8
commit
3e402696be
@ -368,6 +368,6 @@ Some discussions and questions, please see [issues/228](https://github.com/go-vg
|
||||
|
||||
## License
|
||||
|
||||
Robotgo is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.
|
||||
Robotgo is primarily distributed under the terms of "both the MIT license and the Apache License (Version 2.0)", with portions covered by various BSD-like licenses.
|
||||
|
||||
See [LICENSE-APACHE](http://www.apache.org/licenses/LICENSE-2.0), [LICENSE-MIT](https://github.com/go-vgo/robotgo/blob/master/LICENSE).
|
||||
|
66
img.go
66
img.go
@ -17,6 +17,46 @@ import (
|
||||
"github.com/vcaesar/imgo"
|
||||
)
|
||||
|
||||
// DecodeImg decode the image to image.Image and return
|
||||
func DecodeImg(path string) (image.Image, string, error) {
|
||||
return imgo.DecodeFile(path)
|
||||
}
|
||||
|
||||
// OpenImg open the image return []byte
|
||||
func OpenImg(path string) ([]byte, error) {
|
||||
return imgo.ImgToBytes(path)
|
||||
}
|
||||
|
||||
// SaveImg save the image by []byte
|
||||
func SaveImg(b []byte, path string) error {
|
||||
return imgo.Save(path, b)
|
||||
}
|
||||
|
||||
// SavePng save the image by image.Image
|
||||
func SavePng(img image.Image, path string) error {
|
||||
return imgo.SaveToPNG(path, img)
|
||||
}
|
||||
|
||||
// ToByteImg convert image.Image to []byte
|
||||
func ToByteImg(img image.Image) []byte {
|
||||
return imgo.ToByteImg(img)
|
||||
}
|
||||
|
||||
// ToStringImg convert image.Image to string
|
||||
func ToStringImg(img image.Image) string {
|
||||
return string(ToByteImg(img))
|
||||
}
|
||||
|
||||
// StrToImg convert base64 string to image.Image
|
||||
func StrToImg(data string) (image.Image, error) {
|
||||
return imgo.StrToImg(data)
|
||||
}
|
||||
|
||||
// ByteToImg convert []byte to image.Image
|
||||
func ByteToImg(b []byte) (image.Image, error) {
|
||||
return imgo.ByteToImg(b)
|
||||
}
|
||||
|
||||
// RGBAToBitmap convert the standard image.RGBA to Bitmap
|
||||
func RGBAToBitmap(r1 *image.RGBA) (bit Bitmap) {
|
||||
bit.Width = r1.Bounds().Size().X
|
||||
@ -61,3 +101,29 @@ func ToUint8p(dst []uint8) *uint8 {
|
||||
ptr := unsafe.Pointer(&src[0])
|
||||
return (*uint8)(ptr)
|
||||
}
|
||||
|
||||
// ToRGBAGo convert Bitmap to standard image.RGBA
|
||||
func ToRGBAGo(bmp1 Bitmap) *image.RGBA {
|
||||
img1 := image.NewRGBA(image.Rect(0, 0, bmp1.Width, bmp1.Height))
|
||||
img1.Pix = make([]uint8, bmp1.Bytewidth*bmp1.Height)
|
||||
|
||||
copyToVUint8A(img1.Pix, bmp1.ImgBuf)
|
||||
img1.Stride = bmp1.Bytewidth
|
||||
return img1
|
||||
}
|
||||
|
||||
func val(p *uint8, n int) uint8 {
|
||||
addr := uintptr(unsafe.Pointer(p))
|
||||
addr += uintptr(n)
|
||||
p1 := (*uint8)(unsafe.Pointer(addr))
|
||||
return *p1
|
||||
}
|
||||
|
||||
func copyToVUint8A(dst []uint8, src *uint8) {
|
||||
for i := 0; i < len(dst)-4; i += 4 {
|
||||
dst[i] = val(src, i+2)
|
||||
dst[i+1] = val(src, i+1)
|
||||
dst[i+2] = val(src, i)
|
||||
dst[i+3] = val(src, i+3)
|
||||
}
|
||||
}
|
||||
|
77
robotgo.go
77
robotgo.go
@ -51,7 +51,6 @@ package robotgo
|
||||
import "C"
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"image"
|
||||
|
||||
@ -64,12 +63,9 @@ import (
|
||||
"unsafe"
|
||||
|
||||
// "syscall"
|
||||
"encoding/base64"
|
||||
"image/jpeg"
|
||||
"os/exec"
|
||||
|
||||
"github.com/go-vgo/robotgo/clipboard"
|
||||
"github.com/vcaesar/imgo"
|
||||
"github.com/vcaesar/tt"
|
||||
)
|
||||
|
||||
@ -951,36 +947,6 @@ func TocharBitmap(bit C.MMBitmapRef) *C.char {
|
||||
return strBit
|
||||
}
|
||||
|
||||
// ToByteImg convert image.Image to []byte
|
||||
func ToByteImg(img image.Image) []byte {
|
||||
buff := bytes.NewBuffer(nil)
|
||||
jpeg.Encode(buff, img, nil)
|
||||
|
||||
var dist []byte
|
||||
base64.StdEncoding.Encode(dist, buff.Bytes())
|
||||
|
||||
return dist
|
||||
}
|
||||
|
||||
// ToStringImg convert image.Image to string
|
||||
func ToStringImg(img image.Image) string {
|
||||
return string(ToByteImg(img))
|
||||
}
|
||||
|
||||
// StrToImg convert base64 string to image.Image
|
||||
func StrToImg(data string) (image.Image, error) {
|
||||
reader := base64.NewDecoder(base64.StdEncoding, strings.NewReader(data))
|
||||
m, _, err := image.Decode(reader)
|
||||
|
||||
return m, err
|
||||
}
|
||||
|
||||
// ByteToImg convert []byte to image.Image
|
||||
func ByteToImg(b []byte) (image.Image, error) {
|
||||
img, _, err := image.Decode(bytes.NewReader(b))
|
||||
return img, err
|
||||
}
|
||||
|
||||
// ToImage convert C.MMBitmapRef to standard image.Image
|
||||
func ToImage(bit C.MMBitmapRef) image.Image {
|
||||
return ToRGBA(bit)
|
||||
@ -989,28 +955,7 @@ func ToImage(bit C.MMBitmapRef) image.Image {
|
||||
// ToRGBA convert C.MMBitmapRef to standard image.RGBA
|
||||
func ToRGBA(bit C.MMBitmapRef) *image.RGBA {
|
||||
bmp1 := ToBitmap(bit)
|
||||
img1 := image.NewRGBA(image.Rect(0, 0, bmp1.Width, bmp1.Height))
|
||||
img1.Pix = make([]uint8, bmp1.Bytewidth*bmp1.Height)
|
||||
|
||||
copyToVUint8A(img1.Pix, bmp1.ImgBuf)
|
||||
img1.Stride = bmp1.Bytewidth
|
||||
return img1
|
||||
}
|
||||
|
||||
func val(p *uint8, n int) uint8 {
|
||||
addr := uintptr(unsafe.Pointer(p))
|
||||
addr += uintptr(n)
|
||||
p1 := (*uint8)(unsafe.Pointer(addr))
|
||||
return *p1
|
||||
}
|
||||
|
||||
func copyToVUint8A(dst []uint8, src *uint8) {
|
||||
for i := 0; i < len(dst)-4; i += 4 {
|
||||
dst[i] = val(src, i+2)
|
||||
dst[i+1] = val(src, i+1)
|
||||
dst[i+2] = val(src, i)
|
||||
dst[i+3] = val(src, i+3)
|
||||
}
|
||||
return ToRGBAGo(bmp1)
|
||||
}
|
||||
|
||||
func internalFindBitmap(bit, sbit C.MMBitmapRef, tolerance float64) (int, int) {
|
||||
@ -1195,26 +1140,6 @@ func OpenBitmap(gpath string, args ...int) C.MMBitmapRef {
|
||||
return bit
|
||||
}
|
||||
|
||||
// DecodeImg decode the image to image.Image and return
|
||||
func DecodeImg(path string) (image.Image, string, error) {
|
||||
return imgo.DecodeFile(path)
|
||||
}
|
||||
|
||||
// OpenImg open the image return []byte
|
||||
func OpenImg(path string) ([]byte, error) {
|
||||
return imgo.ImgToBytes(path)
|
||||
}
|
||||
|
||||
// SaveImg save the image by []byte
|
||||
func SaveImg(b []byte, path string) error {
|
||||
return imgo.Save(path, b)
|
||||
}
|
||||
|
||||
// SavePng save the image by image.Image
|
||||
func SavePng(img image.Image, path string) error {
|
||||
return imgo.SaveToPNG(path, img)
|
||||
}
|
||||
|
||||
// BitmapStr bitmap from string
|
||||
func BitmapStr(str string) C.MMBitmapRef {
|
||||
return BitmapFromStr(str)
|
||||
|
Loading…
Reference in New Issue
Block a user