Giter VIP home page Giter VIP logo

screenshot-rs's Introduction

screenshot-rs

Get a bitmap image of any display in Rust. This crate is hosted on crates.io.

Contributions welcome!

Examples

extern crate image;
extern crate screenshot;
use screenshot::get_screenshot;

fn main() {
	let s = get_screenshot(0).unwrap();

	println!("{} x {}", s.width(), s.height());

	image::save_buffer(&Path::new("test.png"),
		s.as_slice(), s.width() as u32, s.height() as u32, image::RGBA(8))
	.unwrap();
}

Development

Known Issues

  • get_screenshot leaks memory on certain error conditions, by returning before releasing OS handles. PR's welcome.
  • The BMP Image in the example is rotated +90 degrees because I don't adjust for BMP idiosyncrasy.
  • The PNG Image in the example has its R & B channels exchanged because PistonDevelopers/image doesn't support ARGB pixels.

screenshot-rs's People

Contributors

alexchandel avatar piripant avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

screenshot-rs's Issues

screenshot on windows

I have implement screenshot in C, and I found a way not need flip_rows on windows.

BITMAPINFOHEADER bih = {0};
    bih.biBitCount = bmp.bmBitsPixel;
    bih.biCompression = BI_RGB;
    bih.biHeight = - bmp.bmHeight;   // set this to negative

and there need to convert bgra to rgba

unsigned char* bgra2rgba(unsigned char* buf, DWORD size)
{
    if(0 == size % 4)
    {
        unsigned char* ret = new unsigned char[size]; // new alloc is only need for my own project
        memcpy(ret, buf, size);
        DWORD all_chunks = size / 4;
        for(DWORD i = 0; i< all_chunks; ++i)
        {
            ret[i*4+2] = buf[i*4]; // swap b, r
            ret[i*4] = buf[i*4+2];
            ret[i*4+3] = 255; // alpha channel: XP need this
        }
        return ret;
    }
    return 0;
}

Cargo can't compile v0.0.7

First time trying to use the library and got the following:
After adding screenshot = "0.0.7" to the Cargo.toml file,
I tried running cargo build and this error shows up:

Compiling screenshot v0.0.7
error[E0554]: `#![feature]` may not be used on the stable release channel
  --> [...]\github.com-1ecc6299db9ec823\screenshot-0.0.7\src\lib.rs:15:1
   |
15 | #![feature(core_intrinsics, convert)]
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0554`.
error: could not compile `screenshot` due to previous error

This is the rustc explanation for the error:

Feature attributes are only allowed on the nightly release channel. Stable or
beta compilers will not comply.

Erroneous code example:
#![feature(lang_items)] // error: `#![feature]` may not be used on the
                        //        stable release channel

If you need the feature, make sure to use a nightly release of the compiler
(but be warned that the feature may be removed or altered in the future).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.