C#获取屏幕某一部分的图像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#获取屏幕某一部分的图像相关的知识,希望对你有一定的参考价值。

例如我的屏幕是1280*800的
上面有各种窗体图标
我想获取到 左上角为250,250 目标坐标为350,350的矩形范围内的图像信息
并保存到Bitmap类型的变量里
求具体代码~
采纳额外给50分!

参考技术A 使用Graphics.CopyFromScreen就行了 代码如下
private void button1_Click(object sender, EventArgs e)

Bitmap bit = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bit);
g.CopyFromScreen(new Point(250, 250), new Point(0, 0), bit.Size);
bit.Save("D:\\123.jpg");
bit.Dispose();
g.Dispose();
本回答被提问者采纳

无法对获取的图像进行 segue

【中文标题】无法对获取的图像进行 segue【英文标题】:Unable to segue fetched Image 【发布时间】:2015-02-21 22:21:30 【问题描述】:

鉴于此函数的第一部分,DL 是来自 JSON doc 的字符串,转换为 NSURL,然后转换为 UIImage 以在下一个屏幕之前准备它。我想将此 UIImage 传输到下一个屏幕,我在 ViewController2 中为 IBOutlet 'imageView' 准备了该屏幕。

我在 ViewController1 的 ViewDidLoad() 中调用了这个函数。

但我不知道如何将图像推送到下一个屏幕。

我在情节提要中准备了一个 Push segue 附加到一个自定义按钮,并为它创建了一个 IBAction 附加到 ViewController1。 我已经尝试过 prepareForSegue 和其他涉及实例化情节提要等的尝试,即使数据似乎被正确获取并且 segue 工作,但没有图像显示。

我做错了什么??感谢您的帮助!

func fetchAndPrepImages() 

    let url = NSURL(string:"https://something.json")
    let JSONData = NSData(contentsOfURL: url!)
    let json = JSON(data: JSONData!)
    var err: NSError?
    let count: Int? = json["entry"].arrayValue?.count

    if let ct = count 
        for index in 0...ct 
            if var thumbURL = json["entry"][index]["smimg"]["label"].stringValue 
                self.thumbURLS.append(thumbURL)
            
        
    
    // prepare image for segue
    let nextImage = thumbURLS.formatItem()
    let vc2: ViewController2 = self.storyboard?.instantiateViewControllerWithIdentifier("VC2") as ViewController2
    let imageURL: NSURL? = NSURL(string: nextImage)
    let request: NSURLRequest = NSURLRequest(URL: imageURL!)

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in

        if error == nil 
            println(data) // ** This prints (presumably) image data in the console ** 
            vc2.imageView?.image = UIImage(data: data) // no error, but no image coming up 

        
    )

【问题讨论】:

【参考方案1】:

您应该使用prepareForSegue 方法并从sendAsynchronousRequest 方法中调用您的segue。因此,首先您应该使用诸如“imagePush”之类的标识符进行转场。然后你把图片设置为你的sender:

if error == nil 
    println(data) // ** This prints (presumably) image data in the console ** 
    self.performSegueWithIdentifier("imagePush", sender: UIImage(data: data)


在您的prepareForSegue 方法中,您只需要将发件人转换为您的 UIImage。这应该可行,因为 performSegue 方法在发送 segue 之前调用了 prepareForSegue 方法。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "imagePush"
        let vc2: ViewController2 = ViewController2()
        vc2.imageView?.image = sender as UIImage
    

【讨论】:

感谢您的帮助。我已经实现了上面的代码并且 segue 正确地通过了,但是我仍然没有得到图像。此外,如果我在异步调用中调用 performSegueWithIdentifier,屏幕会在 Screen1 上的按钮被按下之前继续。我的意图是在用户按下按钮之前准备好图像。顺便说一句,没有打印错误。 我认为您需要更改 segue 以便从视图到视图而不是从按钮到视图。 我也试过了,结果是一样的。也许还有其他东西在干扰。不管怎样,谢谢,我会继续努力解决的! 我建议您在第一个视图控制器中显示图片,以检查它是否真的从数据中正确加载。 Christian,我将 fetchAndPrep 的下半部分移到了 prepareForSegue 中,它起作用了。我把这弄得太复杂了。感谢您帮我解决问题。【参考方案2】:

我不太熟悉 Xcode 的内置函数,prepareForSegue 是我以前使用过但忘记的函数。用户 Christian Woerz 在我如何构建函数的背景下提出了一些解决方案,但我无法准确地实现它们,因此我放弃了这种方法并对其进行了一些重新构建。我将 fetchAndPrep() 函数的下半部分(prep)移到 prepareForSegue() 函数中,这很有效。示例代码如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
    if segue.identifier == "imagePush" 
        let nextImage = thumbURLS.formatItem()
        let vc2: ViewController2 = segue.destinationViewController as ViewController2

        let imageURL: NSURL? = NSURL(string: nextImage)
        let request: NSURLRequest = NSURLRequest(URL: imageURL!)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            if error == nil 
                println(data)
                if let image = UIImage(data: data) 
                    vc2.imageView?.image = image
                 else 
                    println("there's an error")
                

            

        )
     

【讨论】:

以上是关于C#获取屏幕某一部分的图像的主要内容,如果未能解决你的问题,请参考以下文章

iOS 为 UIImageView 获取图像的可见部分

C#制作截图软件时,怎样不截取软件窗口本身? 看下图:软件自身也被截下来了

C#获取屏幕鼠标所指点的颜色

是否有使用 C# 比较两个 PNG 图像的一部分而不是完整图像的功能?

C#裁剪图像中的透明部分

使用 C# 和 jQuery 将画布保存到图像