Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.net中调整图像大小和纵横比?_.net_Vb.net - Fatal编程技术网

在.net中调整图像大小和纵横比?

在.net中调整图像大小和纵横比?,.net,vb.net,.net,Vb.net,我用的是一个能拍320 X 240张照片的摄像头。这类图片给了他们一种“风景”的感觉,我需要将图片的大小重新调整为169x225“肖像”图片。这是一个徽章计划。不管怎样,当我重新调整图片的尺寸时,由于纵横比的不同,它们都会被揉成团。有没有办法同时重新调整图像大小和纵横比?这会被认为是裁剪还是调整尺寸?我有点不知道从哪里开始。我主要使用VB,但是如果有人在C#中有一个很好的例子,我会花时间转换它。谢谢更改纵横比和裁剪是一样的。您可以这样计算新的纵向尺寸:(基于标准3 x 5照片大小的比率) 你需要

我用的是一个能拍320 X 240张照片的摄像头。这类图片给了他们一种“风景”的感觉,我需要将图片的大小重新调整为169x225“肖像”图片。这是一个徽章计划。不管怎样,当我重新调整图片的尺寸时,由于纵横比的不同,它们都会被揉成团。有没有办法同时重新调整图像大小和纵横比?这会被认为是裁剪还是调整尺寸?我有点不知道从哪里开始。我主要使用VB,但是如果有人在C#中有一个很好的例子,我会花时间转换它。谢谢

更改纵横比和裁剪是一样的。您可以这样计算新的纵向尺寸:(基于标准3 x 5照片大小的比率)

你需要一个中心裁剪,所以你必须这样计算:

Int cropY = 0 ' Use full height
Int cropX = actualWidth / 2.0 - newWidth / 2.0

System.Drawing中的位图对象具有接受裁剪矩形作为参数的。图形对象具有一个可用于同时调整图像大小和裁剪图像的选项。

更改纵横比和裁剪是一回事。您可以这样计算新的纵向尺寸:(基于标准3 x 5照片大小的比率)

你需要一个中心裁剪,所以你必须这样计算:

Int cropY = 0 ' Use full height
Int cropX = actualWidth / 2.0 - newWidth / 2.0
System.Drawing中的位图对象具有接受裁剪矩形作为参数的。图形对象具有一个可用于同时调整图像大小和裁剪图像的选项。

私有位图旋转图像(位图b,浮动角度)
{
//创建新的空位图以保存旋转的图像
位图返回位图=新位图(b.宽度,b.高度);
//从空位图创建图形对象
Graphics g=Graphics.FromImage(返回位图);
//将旋转点移动到图像的中心
g、 平移变换((浮动)b.宽度/2,(浮动)b.高度/2);
//轮换
g、 旋转变换(角度);
//向后移动图像
g、 平移变换(-(浮动)b.宽度/2,-(浮动)b.高度/2);
//将传入的图像绘制到图形对象上
g、 DrawImage(b,新点(0,0));
返回位图;
}"
专用静态图像大小图像(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH

私有位图旋转图像(位图b,浮动角度)
{
//创建新的空位图以保存旋转的图像
位图返回位图=新位图(b.宽度,b.高度);
//从空位图创建图形对象
Graphics g=Graphics.FromImage(返回位图);
//将旋转点移动到图像的中心
g、 平移变换((浮动)b.宽度/2,(浮动)b.高度/2);
//轮换
g、 旋转变换(角度);
//向后移动图像
g、 平移变换(-(浮动)b.宽度/2,-(浮动)b.高度/2);
//将传入的图像绘制到图形对象上
g、 DrawImage(b,新点(0,0));
返回位图;
}"
专用静态图像大小图像(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH
您有两个选择。由于最终尺寸与原始尺寸非常接近,因此您可以直接进行裁剪,也可以进行裁剪并调整大小。如果裁剪然后调整大小,则需要裁剪到180x240以获得适当的纵横比;当您将结果调整为169x225时,不会出现任何失真


我在VB.NET中找到了一个描述裁剪的快速链接:

您有两个选择。由于最终尺寸与原始尺寸非常接近,因此您可以直接进行裁剪,也可以进行裁剪并调整大小。如果裁剪然后调整大小,则需要裁剪到180x240以获得适当的纵横比;当您将结果调整为169x225时,不会出现任何失真


下面是我在VB.NET中找到的一个描述裁剪的快速链接:

我是在位图类中寻找裁剪方法还是什么?如果我只是设置了高度和宽度,我还会有同样的问题吗?我是在位图类中寻找裁剪方法还是什么?如果我只是设置了高度和宽度,我还会有同样的问题吗?这就是我最终使用的。谢谢这就是我最后使用的。谢谢
private  Bitmap rotateImage(Bitmap b, float  angle)
{
//create a new empty bitmap to hold rotated image
Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
//make a graphics object from the empty bitmap
Graphics g = Graphics.FromImage(returnBitmap);
//move rotation point to center of image
g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
//rotate
g.RotateTransform(angle);
//move image back
g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
//draw passed in image onto graphics object
g.DrawImage(b, new Point(0, 0));
return returnBitmap;
}"




private  static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;

float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;

nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);

if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;

int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);

Bitmap b = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();

return (Image)b;
}



private  static Image cropImage(Image img, Rectangle cropArea)
{
Bitmap bmpImage = new Bitmap(img);
Bitmap bmpCrop = bmpImage.Clone(cropArea,
bmpImage.PixelFormat);
return (Image)(bmpCrop);
}