Witamy, Gość. Zaloguj się lub zarejestruj.

Autor Wątek: Adddate  (Przeczytany 5253 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Abik

Adddate
« dnia: Listopad 17, 2012, 17:19:04 »
Taki mikro program dodający datę do wszystkich zdjęć w wybranym folderze. Ojciec potrzebował, a nie znam żadnego gotowca o tej funkcji, więc sobie zrobiłem.



Kod głównej klasy (tutaj kod jest już dużo lepszy niż w KaliGFX, więc nie zniechęcam do czytania czy pożyczania : D)
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace Adddate
{
public partial class MainForm : Form
{
string folder = String.Empty;
List<FileInfo> doPrzerobki = new List<FileInfo>();

Color kolor = Color.Gray;
int rog = 0;

public MainForm()
{
InitializeComponent();
}

void Button1Click(object sender, EventArgs e) //folderButton
{
folderBrowserDialog1.ShowDialog();
folder = folderBrowserDialog1.SelectedPath;
if(folder != String.Empty){
folderLabel.Text = "Wybrany folder: " + folder;
addDateButton.Enabled = true;

doPrzerobki = new List<FileInfo>();
DirectoryInfo dir = new DirectoryInfo(folder);
long bajty = 0;
int i = 0;
foreach(FileInfo f in dir.GetFiles()){
if((f.Extension == ".jpg") || (f.Extension == ".png") || (f.Extension == ".jpeg")
   || (f.Extension == ".JPG") || (f.Extension == ".PNG") || (f.Extension == ".JPEG")){
doPrzerobki.Add(f);
bajty += f.Length;
i++;
}
}
ileObrazkowLabel.Text = "Liczba obrazków do przetworzenia: " + i.ToString();
ileMbLabel.Text = "Liczba MegaBajtów do przetworzenia: "
+ (bajty/(double)1000000).ToString("#.##");
}
}

void Button2Click(object sender, EventArgs e) //addDateButton
{
if(kolor.IsEmpty)
kolor = Color.Gray;
if((rog > 3) || (rog < 0))
rog = 0;

folderButton.Enabled = false;
addDateButton.Enabled = false;
optionsButton.Enabled = false;
progressBar1.Value = 0;
progressBar1.Minimum = 0;
progressBar1.Maximum = doPrzerobki.Count;

Bitmap bmap = null;
Graphics gfx = null;
Font font = null;
SolidBrush brush = new SolidBrush(kolor);
string tmp = String.Empty;

Stopwatch swatch = Stopwatch.StartNew();
for(int i = 0; i<doPrzerobki.Count; i++){
bmap = (Bitmap) Bitmap.FromFile(doPrzerobki[i].FullName);
gfx = Graphics.FromImage(bmap);
font = new Font("Arial", bmap.Width/50, FontStyle.Regular, GraphicsUnit.Pixel);
tmp = doPrzerobki[i].Name.Substring(0, doPrzerobki[i].Name.IndexOf("."));

if(rog==0) //lewy gorny
gfx.DrawString(doPrzerobki[i].LastWriteTime.ToString(), font, brush, 20, 20);
if(rog==1) //prawy gorny
gfx.DrawString(doPrzerobki[i].LastWriteTime.ToString(),
               font, brush, bmap.Width*(float)0.8, 20);
if(rog==2) //lewy dolny
gfx.DrawString(doPrzerobki[i].LastWriteTime.ToString(),
               font, brush, 20, bmap.Height*(float)0.95);
if(rog==3) //prawy dolny
gfx.DrawString(doPrzerobki[i].LastWriteTime.ToString(),
               font, brush, bmap.Width*(float)0.8, bmap.Height*(float)0.95);

bmap.Save(doPrzerobki[i].DirectoryName + "\\" +   
         tmp+"_2" + doPrzerobki[i].Extension);
gfx.Dispose(); bmap.Dispose();

progressBar1.Value = i+1;
}
swatch.Stop();

folderButton.Enabled = true;
addDateButton.Enabled = true;
optionsButton.Enabled = true;
czasLabel.Text = "Czas przetwarzania: " + (swatch.ElapsedMilliseconds/(float)1000).ToString("0.##") + "s";
}

void Button3Click(object sender, EventArgs e) //optionsButton
{
Opcje opcje = new Opcje(kolor, rog);
if(opcje.ShowDialog() == DialogResult.OK){
this.kolor = opcje.kolor;
this.rog = opcje.rog;
}
}
}
}

Kod klasy z opcjami
using System;
using System.Drawing;
using System.Windows.Forms;

namespace Adddate
{
public partial class Opcje : Form
{
public Color kolor{
get;
private set;
}

public int rog{
get;
private set;
}

public Opcje(Color kolor, int rog)
{
InitializeComponent();
this.kolor = kolor;
this.rog = rog;
whereToComboBox.SelectedIndex = rog;
colorLabel.BackColor = kolor;
}

void Button2Click(object sender, EventArgs e) //okButton
{
this.DialogResult = DialogResult.OK;
this.Close();
}

void Button1Click(object sender, EventArgs e) //colorButton
{
colorDialog1.ShowDialog();
kolor = colorDialog1.Color;
colorLabel.BackColor = kolor;
}

void ComboBox1SelectedIndexChanged(object sender, EventArgs e) //whereToComboBox
{
rog = whereToComboBox.SelectedIndex;
}

void ColorLabelClick(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
kolor = colorDialog1.Color;
colorLabel.BackColor = kolor;
}
}
}

jakby ktoś chciał wszystkie pliki projektu to niech da znać
EXE -> http://www.sendspace.pl/file/e42d7203b5041698de44915/adddate [pewnie szybko wygaśnie, więc jakby ktoś coś to też dać znać]

mam jeszcze taki program do szyfrowania, o wiele większy, ale on jest w ciągłym rozwoju, więc dopiero jak skończę semestr to wrzucę : d

Qajs

  • *
  • Podziękowania otrzymane: 170
    • Zobacz profil
    • Decremi
  • Ostatnie nagrody:
  • Layout of the Fortnight #53
  • Work of the Fortnight #22
  • Layout of the Fortnight #47
Odp: Adddate
« Odpowiedź #1 dnia: Listopad 17, 2012, 17:42:34 »
i tak oto żaba się nudzi :)


ps. w photoshopie masz coś takiego jak "akcje" :D
bo chciałem





A cała twórczość widnieje tu: WhiteBlackRose & koszulki: WBRose

decremi.pl/ portfolio

Abik

Odp: Adddate
« Odpowiedź #2 dnia: Listopad 17, 2012, 21:52:38 »
ale da się zrobić akcję tak żeby pobrało datę utworzenia danego obrazka i napisało mi ją na obrazku? nie jestem przekonany, a w c# napisać to, to była godzinka prawie dokładnie
nigdy nie korzystałem z akcji, to się nie nadaje do niczego, chyba że często robi się coś prostego, a ja takich rzeczy nigdy nie robię xddd