Skip to content

Instantly share code, notes, and snippets.

@luiseduardohd
Forked from conceptdev/AppDelegate.cs
Created January 24, 2013 06:10
Show Gist options
  • Save luiseduardohd/4618063 to your computer and use it in GitHub Desktop.
Save luiseduardohd/4618063 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace ColorControl {
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate {
static void Main (string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main (args, null, "AppDelegate");
}
// class-level declarations
UIWindow window;
UINavigationController navigationController;
UIViewController viewController;
//
// This method is invoked when the application has loaded and is ready to run. In this
// method you should instantiate the window, load the UI into it and then make the window
// visible.
//
// You have 17 seconds to return from this method, or iOS will terminate your application.
//
public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
// create a new window instance based on the screen size
window = new UIWindow (UIScreen.MainScreen.Bounds);
viewController = new ImageViewController();
navigationController = new UINavigationController();
navigationController.PushViewController (viewController, false);
// If you have defined a view, add it here:
window.AddSubview (navigationController.View);
// make the window visible
window.MakeKeyAndVisible ();
return true;
}
}
}
//
// Camera.cs: Support code for taking pictures
//
// Copyright 2010 Miguel de Icaza
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
namespace TweetStation
{
//
// A static class that will reuse the UIImagePickerController
// as iPhoneOS has a crash if multiple UIImagePickerController are created
// http://stackoverflow.com/questions/487173
// (Follow the links)
//
public static class Camera
{
static UIImagePickerController picker;
static Action<NSDictionary> _callback;
static void Init ()
{
if (picker != null)
return;
picker = new UIImagePickerController ();
picker.Delegate = new CameraDelegate ();
}
class CameraDelegate : UIImagePickerControllerDelegate {
public override void FinishedPickingMedia (UIImagePickerController picker, NSDictionary info)
{
var cb = _callback;
_callback = null;
picker.DismissModalViewControllerAnimated (true);
cb (info);
}
}
public static void TakePicture (UIViewController parent, Action<NSDictionary> callback)
{
Init ();
picker.SourceType = UIImagePickerControllerSourceType.Camera;
_callback = callback;
parent.PresentModalViewController (picker, true);
}
public static void SelectPicture (UIViewController parent, Action<NSDictionary> callback)
{
Init ();
picker.SourceType = UIImagePickerControllerSourceType.PhotoLibrary;
_callback = callback;
parent.PresentModalViewController (picker, true);
}
}
}
using System;
using System.Drawing;
using MonoTouch.AssetsLibrary;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
using MonoTouch.CoreImage;
using MonoTouch.CoreGraphics;
namespace ColorControl {
public class ImageViewController : UIViewController {
UIImage sourceImage, displayImage;
NSDictionary sourceMeta;
UIButton cameraButton, saveButton, resetButton;
UIImageView imageView;
UISlider sliderC, sliderS, sliderB;
UILabel labelC, labelS, labelB;
public override void ViewDidLoad ()
{
base.ViewDidLoad ();
Title = "Color Controls";
View.BackgroundColor = UIColor.White;
cameraButton = UIButton.FromType (UIButtonType.RoundedRect);
cameraButton.Frame = new RectangleF(10, 10, 90,40);
cameraButton.SetTitle ("Camera", UIControlState.Normal);
cameraButton.TouchUpInside += (sender, e) => {
TweetStation.Camera.TakePicture (this, (obj) =>{
// https://developer.apple.com/library/ios/#documentation/uikit/reference/UIImagePickerControllerDelegate_Protocol/UIImagePickerControllerDelegate/UIImagePickerControllerDelegate.html#//apple_ref/occ/intfm/UIImagePickerControllerDelegate/imagePickerController:didFinishPickingMediaWithInfo:
var photo = obj.ValueForKey(new NSString("UIImagePickerControllerOriginalImage")) as UIImage;
var meta = obj.ValueForKey(new NSString("UIImagePickerControllerMediaMetadata")) as NSDictionary;
sourceImage = photo;
displayImage = sourceImage.Scale(new SizeF(300, 200));
imageView.Image = displayImage;
sourceMeta = meta;
});
};
View.Add (cameraButton);
resetButton = UIButton.FromType (UIButtonType.RoundedRect);
resetButton.Frame = new RectangleF(110, 10, 90, 40);
resetButton.SetTitle ("Reset", UIControlState.Normal);
resetButton.TouchUpInside += (sender, e) => {
sliderS.Value = 1;
sliderB.Value = 0;
sliderC.Value = 1;
HandleValueChanged (sender, e);
};
View.Add (resetButton);
saveButton = UIButton.FromType (UIButtonType.RoundedRect);
saveButton.Frame = new RectangleF(210, 10, 90, 40);
saveButton.SetTitle ("Save", UIControlState.Normal);
saveButton.TouchUpInside += (sender, e) => {
ALAssetsLibrary library = new ALAssetsLibrary();
var img = AdjustImage (sourceImage);
if(sourceMeta == null) sourceMeta = new NSDictionary();
library.WriteImageToSavedPhotosAlbum (img.CGImage, sourceMeta, (assetUrl, error) => {
Console.WriteLine ("SAVED TO assetUrl:"+assetUrl);
new UIAlertView("Saved", "Photo saved to Camera Roll", null, "OK", null).Show ();
});
};
View.Add (saveButton);
labelC = new UILabel(new RectangleF(10, 70, 90, 20));
labelS = new UILabel(new RectangleF(10, 110, 90, 20));
labelB = new UILabel(new RectangleF(10, 150, 90, 20));
labelC.Text = "Contrast";
labelS.Text = "Saturation";
labelB.Text = "Brightness";
View.Add (labelC);
View.Add (labelS);
View.Add (labelB);
sliderB = new UISlider(new RectangleF(100, 70, 210, 20));
sliderS = new UISlider(new RectangleF(100, 110, 210, 20));
sliderC = new UISlider(new RectangleF(100, 150, 210, 20));
// http://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html#//apple_ref/doc/filter/ci/CIColorControls
sliderS.MinValue = 0;
sliderS.MaxValue = 2;
sliderS.Value = 1;
sliderB.MinValue = -1;
sliderB.MaxValue = 1;
sliderB.Value = 0;
sliderC.MinValue = 0;
sliderC.MaxValue = 4;
sliderC.Value = 1;
sliderC.TouchUpInside += HandleValueChanged;
sliderS.TouchUpInside += HandleValueChanged;
sliderB.TouchUpInside += HandleValueChanged;
View.Add (sliderC);
View.Add (sliderS);
View.Add (sliderB);
imageView = new UIImageView(new RectangleF(10, 190, 300, 200));
sourceImage = UIImage.FromFile ("clouds.jpg");
displayImage = sourceImage;
imageView.Image = displayImage;
View.Add (imageView);
if (!UIImagePickerController.IsSourceTypeAvailable (UIImagePickerControllerSourceType.Camera)) {
cameraButton.SetTitle ("No camera", UIControlState.Disabled);
cameraButton.SetTitleColor (UIColor.Gray, UIControlState.Disabled);
cameraButton.Enabled = false;
}
}
void HandleValueChanged (object sender, EventArgs e)
{ // use the low-res version
imageView.Image = AdjustImage (displayImage);
}
CIColorControls colorCtrls;
UIImage AdjustImage (UIImage image) {
if (colorCtrls == null)
colorCtrls = new CIColorControls () {
Image = CIImage.FromCGImage (image.CGImage),
Brightness = sliderB.Value,
Saturation = sliderS.Value,
Contrast = sliderC.Value
};
else {
colorCtrls.Brightness = sliderB.Value;
colorCtrls.Saturation = sliderS.Value;
colorCtrls.Contrast = sliderC.Value;
colorCtrls.Image = CIImage.FromCGImage(image.CGImage);
}
var output = colorCtrls.OutputImage;
var context = CIContext.FromOptions (null);
var result = context.CreateCGImage (output, output.Extent);
colorCtrls = null;
return UIImage.FromImage(result);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment