|
buchstaben wrote: I guess there is a way using Reflection, so could anyone give me a hint on where to start?
This Article[^] might be as good a place to start as any
led mike
|
|
|
|
|
Hello,
I have several high-res (600dpi) TIFF files. I need to stitch these files together into one new high-res (600dpi) TIFF file. I got it working with the standard resolution (96dpi) but i can't get it to work with 400 or 600 dpi. Any help would be welcome!
This is the code i have so far:
Bitmap bmp = new Bitmap((int)imagewidth, (int)imageheight, PixelFormat.Format24bppRgb);
bmp.SetResolution(600, 600);
Graphics g = Graphics.FromImage(bmp);
int startpoint = 0;
for (int x = 0; x < bands.Count; x++)
{
string file = bands[x].ToString();
Bitmap tmp = new Bitmap(file);
g.DrawImage(tmp, startpoint, 0, tmp.Width, tmp.Height);
startpoint = startpoint + tmp.Width;
}
bmp.Save("c:\\bands\\alltogeher.tif", ImageFormat.Tiff);
Thanks, Ben
|
|
|
|
|
bverp wrote: I got it working with the standard resolution (96dpi) but i can't get it to work with 400 or 600 dpi.
What is the error you are getting?
|
|
|
|
|
Parameter invalid. It doesn't say much about the error.
|
|
|
|
|
bverp wrote: Parameter invalid. It doesn't say much about the error.
Yeah, they are normally not very helpful in GDI+.
I suspect .NET does not support such large DPI on images.
|
|
|
|
|
Which line is the error occurring on?
What are the values of the parameters when that line is executed?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
|
There AIN'T no f&^*in french fries!
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I get the Parameter is not valid error on line:
Bitmap bmp = new Bitmap((int)inputwidth, (int)inputheight, PixelFormat.Format24bppRgb);
The inputwidth is 16762 and the inputheight is 23258.
Thanks, Ben
|
|
|
|
|
I tried the following code on Vista (2GB RAM) and it worked fine
(took some grinding to create and compress that big image though! )
int imagewidth = 16762;
int imageheight = 23258;
Bitmap bmp = new Bitmap((int)imagewidth, (int)imageheight, PixelFormat.Format24bppRgb);
bmp.SetResolution(600, 600);
bmp.Save("e:\\alltogeher.tif", ImageFormat.Tiff);
I would guess either you're not getting enough memory to create that huge
bitmap or you're on a version of Windows that has a GDI+ limit on bitmap
dimensions.
The resolution is added to the bitmap's/file's metadata (for types that support it)
but it doesn't affect the size of the image.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks for the reply. I tried it on Vista and it works. Do you know a method to get it to work on Windows XP?
Ben
|
|
|
|
|
I'm not sure. Vista has a newer GDI+ version that is not available for
any pre-Vista OSs. I can't find any documented maximum bitmap dimensions
for GDI+.
Are you sure the system is able to get the 1GB chunk of memory needed for that
image? If so, does smaller dimensions work?
I would at least expect it to work with dimensions that fit in a 16 bit signed int,
like GDI.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
I have 2GB of memory in my system. The initial size of the pagefile is set to 756MB, the maximum size of the pagefile is set to 1512MB.
I'm not familar with C++. Do you think it is a .NET limitation and that it could be possible with C++. Do you have the code for me?
Ben
|
|
|
|
|
bverp wrote: Do you think it is a .NET limitation
I don't think so - you're using the same version of .NET on both platforms, right?
If smaller image dimensions works on XP, then that's the solution - you can't
use GDI+ for bitmaps that big...you'll have to use something else or write your own
image handling code.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
If you don't want to resize the images, the resolution is irrelevant. It's only used to convert between measurements in inches and pixels.
I see that you create a bunch of Bitmap objects that you never dispose. That's not good for the memory management.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Hello,
I am using the smtpclient class to deliver mail to an smtp server
but I want to know the statues of each recipient in my message whether it receives it or not. Ok, my question will be like this is the smtpclient class works in a transaction? which means that its only objective is to deliver the mail message to the smtp server and not to follow whether this server will send it or not?
Thanks.
Dad
|
|
|
|
|
hadad wrote: I want to know the statues of each recipient in my message whether it receives it or not.
You are sending an email. When you send an email do you get a notification if the client failed to receive it? How does that notification manifest itself?
You will only get an immediate notification if the connection to your immediate SMTP server fails. After that, if it fails you will get an email back - maybe, possibly, perhap, then again maybe not.
You might like to read up on how email works, then you will understand what limitations there are.
|
|
|
|
|
I'm writing a class that relies on a TcpClient. The class has a Connect() method that starts a new thread reading data from a server. If the Connect() method has previously been called and the TcpClient is in the process of connecting or is connected I want to throw an Exception. When the connection closes I want to dispose of any resources associated with the TcpClient. Is this the correct way to go about it? I'm guessing not.
using System;
using System.IO;
using System.Net.Sockets;
using System.Threading;
namespace foo
{
public class foo
{
bool b;
TcpClient tcpClient;
NetworkStream networkStream;
StreamWriter streamWriter;
StreamReader streamReader;
public void Connect(string addr, int port)
{
if (b) throw new InvalidOperationException();
Thread t = new Thread(new ThreadStart(delegate
{
try
{
b = true;
tcpClient = new TcpClient();
tcpClient.Connect(addr, port);
networkStream = tcpClient.GetStream();
streamReader = new StreamReader(networkStream);
streamWriter = new StreamWriter(networkStream);
while (tcpClient.Connected)
{
string s = streamReader.ReadLine();
// do some wacky stuff
}
try { streamReader.Close(); }
catch { }
try { streamWriter.Close(); }
catch { }
try { networkStream.Close(); }
catch { }
try { tcpClient.Close(); }
catch { }
b = false;
}
catch (Exception e)
{
try { streamReader.Close(); }
catch { }
try { streamWriter.Close(); }
catch { }
try { networkStream.Close(); }
catch { }
try { tcpClient.Close(); }
catch { }
b = false;
}
}));
t.Start();
}
}
}
|
|
|
|
|
Emil Müller wrote: I'm guessing not.
Why guess? There have been like a million articles and tutorials on the internet about Socket programming for years. Find some and read them. I imagine there are some here in the CodeProject articles.
led mike
|
|
|
|
|
SELECT product.name AS Name, product.[desc] AS Description, product.modelNo AS Model, category.categoryName AS Category, product.MRSP AS [MSRP ($)],
product.retailPrice AS [Retail Price], product.[image] AS [Image]
FROM (category INNER JOIN
product ON product.categoryID = category.categoryID)
When this is bounded to the datagridview, it shows the MRSP as the last column.. I want the image column to be the last
meaning
Name | Desc | Model | Category | MSRP($)| Retail PRice | Image
NOW IT IS
Name | Desc | Model | Category | MSRP($)| Image | Retail PRice
|
|
|
|
|
If, prior to binding the data set to the grid, you pre-define your collection of grid columns and their individual data bindings (DataPropertyName) in the order you want, and set the AutoGenerateColumns property of the datagridview to false, you should be fine.
I hope that makes sense.
|
|
|
|
|
once i set the AutoGenerateColumns to false, it does not show anything.
BTw i am using the tableAdapter in dataset.xsd.
i am not harding my coding inside my cs file
private void btnViewAll_Click(object sender, EventArgs e)
{
dataGridInfo.DataSource = null;
dataGridInfo.Rows.Clear();
BindingSource bs = new BindingSource();
bs.DataSource = this.productTableAdapter.GetData();
dataGridInfo.DataSource = bs;
}
|
|
|
|
|
benjamin yap wrote: once i set the AutoGenerateColumns to false, it does not show anything.
You also need to predefine the location of the columns in the grid either programatically, or by editing the columns collection directly in the grid. If you right-click on the grid, and select 'Edit Columns', you can add the columns you want and set various columns properties including, most importantly in your case, the 'DataPropertyName' which should be the name of the field as defined in the dataset/datatable being bound to the grid via the BindingSource.
|
|
|
|
|
I have class
FormData {
public System.Drawing.Font TextBoxFont;
}
I need to read/store this class in isolated storage in Winforms application and also in user settings.
Using
XmlSerializer formatter = new XmlSerializer(typeof(FormData),
"MyNameSpace");
causes exception
System.Drawing.Font cannot be serialized because it does not have a
parameterless constructor.
How to fix ?
Andrus
|
|
|
|
|
AndrusM wrote: How to fix ?
Well you are going to want to check out how to control Serialization, there are a number of ways. You probably want to start with this[^] You may end up implementing IXmlSerializable[^]
It shouldn't take you long to get up to speed, I have used it in the past and it's fairly simple.
led mike
|
|
|
|