如何改变图片的真实大小,而不是在屏幕上暂时缩放?

dvdvip 2009-05-27 04:08:45
我知道,能直接设置PictureBox的SizeMode属性为Zoom后。再设置PictureBox的Width和Height.
例如:



private void Button1_Click(object sender,EventArgs e)
{this.PictureBox1.Width=this.PictureBox1.Width*4;
this.PictureBox1.Height=this.PictureBox1.Height*4;}


这样,图片在屏幕上就被拉伸为原来的4倍。
但是,图片实际大小实现上没有改变。它只不过是在屏幕上被暂时放大。


 private void Button2_Click(object sender,EventArgs e)
{string wh=this.PictureBox1.Image.Width.ToString()+@" "+this.PictureBox1.Image.Height.ToString();MessageBox.Show(wh);}




这个可以看出来,图片没有被真正地改变大小。这个PictureBox好像在骗人的。不能帮我直接改变图片的真实大小。

我以后还要直接对图片处理里。例如:





 Bitmap kk=new Bitmap(原图片变成4倍后的新图片);






请问C#有什么办法,可以生成一个新的图片kk, 它的真实大小是原来的4倍?
...全文
273 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GripVips 2010-12-03
  • 打赏
  • 举报
回复
这下可帮了我大帮了! 试了一下三楼的方法 !果然蛮简单的!
guochanshan 2009-05-27
  • 打赏
  • 举报
回复
123楼的思路 都是一致的。
Harvey_He 2009-05-27
  • 打赏
  • 举报
回复

楼上的都对
zgke 2009-05-27
  • 打赏
  • 举报
回复
使用Graphics把


pictureBox1.Image = Image.FromFile(@"C:\Temp\2.bmp");

int _Width = pictureBox1.Width * 4;
int _Height = pictureBox1.Height * 4;

Bitmap _ZoomBitmap = new Bitmap(_Width, _Height);
Graphics _Graphics = Graphics.FromImage(_ZoomBitmap);
_Graphics.DrawImage(pictureBox1.Image, 0, 0, _Width, _Height);
_Graphics.Dispose();

_ZoomBitmap.Save(@"C:\Temp\Zoom.bmp");
wartim 2009-05-27
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication9
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Bitmap Bmp = new Bitmap(pictureBox1.Image.Width * 4, pictureBox1.Image.Height * 4);
Graphics G = Graphics.FromImage(Bmp);
G.DrawImage(pictureBox1.Image, new Rectangle(new Point(0, 0), Bmp.Size));
G.Dispose();
pictureBox1.Image = Bmp;
}
}
}
路人乙e 2009-05-27
  • 打赏
  • 举报
回复

/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="fileStream">文件流(与原路径二者选一)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式(HW,W,H,Cut)</param>
public static void MakeThumbnail(string originalImagePath, Stream fileStream, string thumbnailPath, int width, int height, string mode)
{
Image originalImage = null;
if (originalImagePath != "") originalImage = Image.FromFile(originalImagePath);
else originalImage = Image.FromStream(fileStream);

int towidth = width;
int toheight = height;

int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height;

switch (mode)
{
case "HW"://指定高宽缩放(可能变形)
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
toheight = originalImage.Height * width / originalImage.Width;
break;
}


Image bitmap = new Bitmap(towidth, toheight);//新建一个bmp图片

Graphics g = Graphics.FromImage(bitmap);//新建一个画板

g.InterpolationMode = InterpolationMode.High;//设置高质量插值法

g.SmoothingMode = SmoothingMode.HighQuality;//设置高质量,低速度呈现平滑程度

g.Clear(Color.Transparent);//清空画布并以透明背景色填充

//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow, oh), GraphicsUnit.Pixel);

try
{
bitmap.Save(thumbnailPath, ImageFormat.Jpeg);
}
catch (Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧