Perşembe, Şubat 09, 2006

Invalid Parameter used, image from memory stream ... doh!

Geçenlerde, network kamera ile uğraşırken, .NET de İmage'i MemoryStream' e ,Memory stream ' i image ' e çevirmeye çalıştığımda sürekli bu hatayı aldım.Daha doğrusu client-server mimarisinde işlem yapmaya çalışırken, resimleri networkten aktarmaya çalışıyordum.

Network Cam ----> TCP Server ------> TCP Client

Şeklinde çalışan bir sistemde, resim nasıl alacağız ? SocketClient a data geldiğinde bufferın boşalana kadar resim datasını byte byte okumayı denedim. O zaman sorunum çözüldü.

Client:

String strMessage = System.Text.ASCIIEncoding.ASCII.GetString(pSocket.GetRawBuffer,0, pSocket.GetMessageLength); //

if (strMessage.Length > 0)
{

for(int g=0;g‹psocket.getmessagelength;g++)
{

if (recv==0)
{
data[g]=pSocket.GetRawBuffer[g];
}
else
{
data[pos]=pSocket.GetRawBuffer[g];
}
pos+=1;
}
recv += 1;
MemoryStream str = new MemoryStream(data);
c = Image.FromStream(str);
if (pSocket.GetMessageLength ‹ pSocket.GetSizeOfRawBuffer)
this.p1.Image =c;
}
}


server :


string sURL = "http://"+strMessage.Trim();
string t ="";
for(int j=0;j‹ sURL.Length;j++)
if (s!="\0")
{
s=sURL.Substring(j,1); t+=s;
}
}
WebRequest request;
request = WebRequest.Create(t);
request.Credentials = new NetworkCredential("root","root");
Stream stream;
stream = request.GetResponse().GetResponseStream();
StreamReader reader = new StreamReader(stream);
try
{
if(stream!= null)
{
Image img = Image.FromStream(stream);
//img.Save(@"C:\test1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Byte[] b = new Byte[0];
b = convertImageToByte(img);
pSocket.Send(b);
}
}
catch
{
}

Pazartesi, Şubat 06, 2006

LEADTOOLS HylaFax

Piyasada fax göndermek için bir çok fax sunucu yazılımı var. çoğuda paralı. Ama bir de HylaFax varmış. Hem beleş, hemde linuxda çalışan harika bir yazılım.Yaz ortasında , C#, LeadTools ve HylaFax , PdfCreator dörtlüsüyle güzel bir proje gerçekleştirdik.

Web üzerinde ve desktop tan hem tarayıcıdan hemde word belgesi ya serbest yazıyla fax gönderilmisini sağlayan bir otomasyon kurduk.

Web tabanlı uygulama ve bir web servisiyle , kullanıclar word belgelerini server a atıp, orda Word objects kullanarak dökümanlarını pdf çevirip , fax gönderebiliyorlar. Aslında biraz karışık bir sistem.HylaFax ınçalışıtığı makinayla web servisin çalıştığı maki arasında samba ile mapping var. Word dosyaları burada PdfCreatorle pdf e çevrildikten sonra , oracle üzerinde shel komutu çalıştırarak fax mesajlarını gönderiyorlar. Taracıyı kısmında Twain datasını image olarak kaydedip leadtools u kullanara FaxTiff e çevirip yine aynı şekilde fax mesajları gönderiliyor.

Bu sistemle bugüne kadar 10.000 üzerinde fax çekilmiş durumda.

DYMO ve 20000 etiket

Geçen sene kurum içinde kullanılmak üzere geliştirdiğim demirbaş otomasyonunda kullandığımız DYMO LM450 ile yaklaşık olarak 20000 adet etiket başmışız. Geçen hafta arıza için servise gönderdiğimizde , artık printer için bir şey yapılamayacağını söylemişler.

Dymo LM450 nin özelliği, desktop için kullnılan , klavyesi de olan, istenilen datayı kendi etiketlerine basabilmesi.

Demirbaş uygulamasında en büyük problem etiketin uzunluğu ayarlabilmek ve yazıcının düşük özellikli termal başlığından barkod ve resim basabilmekti.

Brush br = new SolidBrush(Color.Black);
if (m_change_settings)
{
EtiketPrinterSettings sd = new EtiketPrinterSettings();
PrinterData pss = new PrinterData();

pss.Duplex = PageDuplex.DMDUP_SIMPLEX;
pss.Size = PaperSize.DMPAPER_USER;
pss.source = PaperSource.DMBIN_FORMSOURCE;
pss.Orientation = PageOrientation.DMORIENT_LANDSCAPE;
sd.MyEtiketUzunluk = m_e_uz;
sd.MyEtiketWidth = m_e_w;
sd.ChangePrinterSetting(m_PrinterName,pss);
}

if (m_show_image)
{

Bitmap bmp = new Bitmap("amblem.bmp");
g.DrawImage(bmp, 0, 0 , 50, 50);

g.DrawString( m_Header , m_PrintFont, br, 40, 0);
g.DrawString( "*" + m_BarcodeData +"*" , m_BarcodeFont, br, 52, 10);
//g.DrawString( "*" + m_BarcodeData +"*" , m_BarcodeFont, br, rfet);
}
else
{
g.DrawString(m_Header , m_PrintFont, br, 5, 5);
m_BarcodeFont = new Font("CarolinaBar-25F2", 10);
g.DrawString( "*" + m_BarcodeData +"*" , m_BarcodeFont, br, 10, 13);
if(m_ShowHumanReadable)
{
g.DrawString(m_label_info, m_PrintFont, br, 5, 40);
}
}

yordamıyla standart graphics işlemlerini kullanrak printerdan çıktıları alıyorum. Buradaki EtiketPrinterSettings nesnesi intenet ve microsofta bulunabilen standart winspool.drv implementasyonu. Etiket boyuda standar DEVMODE içinde tanımlı değişkenlerden ayarlanabiliyor.