Discussion:
關於圖片的大小變更
(时间太久无法回复)
ammon
2005-02-17 08:13:01 UTC
Permalink
請教

原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。

遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂

想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
Lee,Hou-Hsien
2005-02-18 02:53:02 UTC
Permalink
using System.Drawing.Bitmap;
using System.Drawing.Imaging;

假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:

Bitmap b = new Bitmap(@"C:\Picture.jpg", 800, 600);

接著存檔:

b.Save(@"C:\Picture-s.jpg",ImageFormat.Jpeg);

就完成了,不知道這樣能不能達到您想要的效果?


Lee,Hou-Hsien




"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
Lee,Hou-Hsien
2005-02-18 03:01:06 UTC
Permalink
如果不需改變圖檔格式,只要:
using System.Drawing.Bitmap;

Bitmap b = new Bitmap(@"C:\Picture.jpg", 800, 600);

接著存檔:

b.Save(@"C:\Picture-s.jpg");

就完成了。

Lee,Hou-Hsien


"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
ammon
2005-02-18 04:05:01 UTC
Permalink
Lee,Hou-Hsien,

你的class 宣告錯誤哦...
搭配width, heigth 宣告的是 image 而非是file name


"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
Lee,Hou-Hsien 李後賢
2005-02-21 03:57:02 UTC
Permalink
嗯~不好意思...太久沒用了...:P

這樣的話..
您得先將原圖 Load 進來,
轉型成 Image 之後,再改大小即可。

Lee,Hou-Hsien


"ammon" 來函:
Post by ammon
Lee,Hou-Hsien,
你的class 宣告錯誤哦...
搭配width, heigth 宣告的是 image 而非是file name
"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
ammon
2005-02-21 07:23:02 UTC
Permalink
李'r,

如果方便的話,你可以按照你自己說的方式測試看看結果嗎 ?!
因為我之前便已經使用 System.Drawing.Image 的方式去把圖 load 起來,在塞到 System.Grapices
,不過在執行.save此一方法時,會出現錯誤訊息。

錯誤訊息如下:
例外詳細資訊: System.Runtime.InteropServices.ExternalException: 在 GDI+ 中發生泛用錯誤。

3Q

Ammon


"Lee,Hou-Hsien 李後賢" 來函:
Post by Lee,Hou-Hsien 李後賢
嗯~不好意思...太久沒用了...:P
這樣的話..
您得先將原圖 Load 進來,
轉型成 Image 之後,再改大小即可。
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
Lee,Hou-Hsien,
你的class 宣告錯誤哦...
搭配width, heigth 宣告的是 image 而非是file name
"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
Lee,Hou-Hsien 李後賢
2005-02-22 05:11:02 UTC
Permalink
開一個 Web 專案,拉一個 Button,在 c:\ 下準備一張 Picture.jpg,
C# 程式碼如下,經測試是 ok 的:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;

namespace WebApplication3
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
Bitmap b = new Bitmap(@"C:\Picture.jpg");
Bitmap b2 = new Bitmap(b, 80, 60);
b2.Save(@"C:\Picture-s.jpg",ImageFormat.Jpeg);
}
}
}

Lee,Hou-Hsien


"ammon" 來函:
Post by ammon
李'r,
如果方便的話,你可以按照你自己說的方式測試看看結果嗎 ?!
因為我之前便已經使用 System.Drawing.Image 的方式去把圖 load 起來,在塞到 System.Grapices
,不過在執行.save此一方法時,會出現錯誤訊息。
錯誤訊息如下:
例外詳細資訊: System.Runtime.InteropServices.ExternalException: 在 GDI+ 中發生泛用錯誤。
3Q
Ammon
"Lee,Hou-Hsien 李後賢" 來函:
Post by Lee,Hou-Hsien 李後賢
嗯~不好意思...太久沒用了...:P
這樣的話..
您得先將原圖 Load 進來,
轉型成 Image 之後,再改大小即可。
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
Lee,Hou-Hsien,
你的class 宣告錯誤哦...
搭配width, heigth 宣告的是 image 而非是file name
"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
ammon
2005-02-22 05:43:05 UTC
Permalink
李'r,

問題解決了,相當感謝 !!

Ammon

"Lee,Hou-Hsien 李後賢" 來函:
Post by Lee,Hou-Hsien 李後賢
開一個 Web 專案,拉一個 Button,在 c:\ 下準備一張 Picture.jpg,
C# 程式碼如下,經測試是 ok 的:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
namespace WebApplication3
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
Bitmap b2 = new Bitmap(b, 80, 60);
}
}
}
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
李'r,
如果方便的話,你可以按照你自己說的方式測試看看結果嗎 ?!
因為我之前便已經使用 System.Drawing.Image 的方式去把圖 load 起來,在塞到 System.Grapices
,不過在執行.save此一方法時,會出現錯誤訊息。
錯誤訊息如下:
例外詳細資訊: System.Runtime.InteropServices.ExternalException: 在 GDI+ 中發生泛用錯誤。
3Q
Ammon
"Lee,Hou-Hsien 李後賢" 來函:
Post by Lee,Hou-Hsien 李後賢
嗯~不好意思...太久沒用了...:P
這樣的話..
您得先將原圖 Load 進來,
轉型成 Image 之後,再改大小即可。
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
Lee,Hou-Hsien,
你的class 宣告錯誤哦...
搭配width, heigth 宣告的是 image 而非是file name
"Lee,Hou-Hsien" 來函:
Post by Lee,Hou-Hsien
using System.Drawing.Bitmap;
using System.Drawing.Imaging;
假設要將一張 2272 * 1704 的圖案 C:\Picture.jpg 縮成 800 * 600 ,
首先,將此圖以800 * 600 載入到 Bitmap 物件中:
接著存檔:
就完成了,不知道這樣能不能達到您想要的效果?
Lee,Hou-Hsien
"ammon" 來函:
Post by ammon
請教
原意:
針對圖片變更大小,如 2272 * 1704 改成 800 * 600 or 400 * 300 改成 800 *
600,可以另存成一個新的圖片檔案,圖片格式不變(JPG still JPG),但希望檔案大小會跟著變化(如,原size 1420KB,轉成800 *
600 後,應縮小到 500 KB 以下)。
遇到的狀況:
使用 System.Drawing.Image 可以透過事件 GetThumbnailImage
取得該圖片中原有的縮圖來製造縮圖,目前這點是OK的,不過,如果是改成 size 大一點的就會有問題,圖片會失真,如:指定大小超過180 * 120 以上
也試過 System.Graphics.DrawImage ,但是在使用上會有錯誤發生,SDK上的範例 >_< 看不懂
想得到的答案:
不知道是否有方法可以隨意改變圖片的大小,同時圖片不失真,且可以存檔下來的方法
--
welcome to http://ammon.idv.ec
Jeffrey
2006-06-21 20:08:02 UTC
Permalink
是 Visual C++ 的 bug 嗎? 放大率好像不對
用 Graphics.DrawImage (Bitmap, Int32, Int32, Int32, Int32) 放大圖形時比例不對

部分程式碼如下:

private: System::Windows::Forms::PictureBox^ pictureBox1;

this->pictureBox1->Paint += gcnew
System::Windows::Forms::PaintEventHandler(this, &Form1::pictureBoxPaint);


private: System::Void pictureBoxPaint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^ e) {
Graphics ^g = e->Graphics;
Pen^ bluePen = gcnew Pen( Color::Red,1.0f );

Bitmap ^bmTest = gcnew Bitmap(1, 1);
bmTest->SetPixel(0,0,Drawing::Color::Black);
g->InterpolationMode = Drawing2D::InterpolationMode::NearestNeighbor;
g->DrawImage(bmTest, 1, 1, 500, 500);
g->DrawRectangle(bluePen,0,0,501,501);
}

Jeffrey Yang

Loading...