欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C#一個(gè)制作圖像的特寫窗口

 更新時(shí)間:2025年01月15日 16:09:38   作者:坐井觀老天  
許多網(wǎng)站都會(huì)顯示一個(gè)特寫窗口,其中顯示放大的圖像部分,以便您可以看到更多細(xì)節(jié),本文將使用C#制作一個(gè)簡(jiǎn)單的圖像的特寫窗口,感興趣的可以了解下

許多網(wǎng)站都會(huì)顯示一個(gè)特寫窗口,其中顯示放大的圖像部分,以便您可以看到更多細(xì)節(jié)。您在主圖像上移動(dòng)鼠標(biāo),它會(huì)在單獨(dú)的圖片中顯示特寫。此示例執(zhí)行的操作類似。(示例使用的一些數(shù)學(xué)運(yùn)算非常棘手,因此您可能需要仔細(xì)查看才能了解其工作原理。)

特寫圖實(shí)際上只是原始圖像的全尺寸副本。(“主”圖像是較小比例的相同圖像。)要顯示特寫圖,程序會(huì)在名為picCloseup的PictureBox中顯示全尺寸圖像。該控件位于名為panCloseup的Panel內(nèi)。通過(guò)在panCloseup內(nèi)移動(dòng)picCloseup,程序可以顯示全尺寸圖像的不同部分。

以下代碼使程序準(zhǔn)備啟動(dòng)。

// Save the original image.
private Bitmap OriginalImage, ShadedImage;
private int SmallWidth, SmallHeight;
private float ScaleX, ScaleY;
private void Form1_Load(object sender, EventArgs e)
{
    OriginalImage = picWhole.Image as Bitmap;
    picCloseup.Image = OriginalImage;
    picCloseup.SizeMode = PictureBoxSizeMode.AutoSize;
 
    // Make a shaded version of the image.
    ShadedImage = new Bitmap(OriginalImage);
    using (Graphics gr = Graphics.FromImage(ShadedImage))
    {
        using (Brush br =
            new SolidBrush(Color.FromArgb(128, 255, 255, 255)))
        {
            Rectangle rect = new Rectangle(0, 0,
                ShadedImage.Width, ShadedImage.Height);
            gr.FillRectangle(br, rect);
        }
    }
 
    // Get scale factors to map from big scale to small scale.
    ScaleX = (float)panCloseup.ClientSize.Width /
        OriginalImage.Width;
    ScaleY = (float)panCloseup.ClientSize.Height /
        OriginalImage.Height;
 
    // See how big the closeup is on the small scale.
    SmallWidth = (int)(ScaleX * picWhole.ClientSize.Width);
    SmallHeight = (int)(ScaleY * picWhole.ClientSize.Height);
}

此代碼保存原始圖像并制作該圖像的亮化版本。要制作亮化版本,它會(huì)復(fù)制原始圖像,然后用半透明的白色矩形填充它。這將成為您將鼠標(biāo)移到其上的主圖像。

當(dāng)鼠標(biāo)移入或移出主圖像時(shí),將執(zhí)行以下代碼。

// Use the shaded background image.
private void picWhole_MouseEnter(object sender, EventArgs e)
{
    picWhole.Image = ShadedImage;
    panCloseup.Visible = true;
}
 
// Use the regular image.
private void picWhole_MouseLeave(object sender, EventArgs e)
{
    picWhole.Image = OriginalImage;
    panCloseup.Visible = false;
}

當(dāng)鼠標(biāo)位于主圖像之外時(shí),程序顯示正常的非亮化版本。當(dāng)鼠標(biāo)進(jìn)入圖像時(shí),程序切換為顯示亮化圖像。

當(dāng)鼠標(biāo)在主圖像上移動(dòng)時(shí),以下代碼會(huì)顯示鼠標(biāo)周圍區(qū)域的特寫。

// Display a closeup of this area.
private Rectangle ViewingRectangle;
private void picWhole_MouseMove(object sender, MouseEventArgs e)
{
    // Position picCloseup inside its parent Panel.
    float x = (float)e.X / picWhole.ClientSize.Width *
        OriginalImage.Width -
        (float)panCloseup.ClientSize.Width / 2;
    float y = (float)e.Y / picWhole.ClientSize.Height *
        OriginalImage.Height -
        (float)panCloseup.ClientSize.Height / 2;
    if (x < 0) x = 0;
    if (y < 0) y = 0;
    if (x > OriginalImage.Width - panCloseup.ClientSize.Width)
        x = OriginalImage.Width - panCloseup.ClientSize.Width;
    if (y > OriginalImage.Height - panCloseup.ClientSize.Height)
        y = OriginalImage.Height - panCloseup.ClientSize.Height;
    picCloseup.Location = new Point(-(int)x, -(int)y);
 
    // Record the position we are viewing.
    ViewingRectangle = new Rectangle((int)x, (int)y,
        panCloseup.ClientSize.Width, 
        panCloseup.ClientSize.Height);
 
    // Draw the closeup area.
    picWhole.Invalidate();
}

首先,代碼決定鼠標(biāo)周圍的區(qū)域在哪里。如果該區(qū)域部分位于主圖像之外,則代碼會(huì)調(diào)整其 X 和 Y 坐標(biāo),使該區(qū)域位于主圖像內(nèi)。這樣可以讓特寫顯示盡可能多的圖像。

代碼將picCloseup移動(dòng)到panCloseup內(nèi),以顯示全尺寸圖像的正確部分。然后,它將在變量ViewingRectangle中記錄主圖像上將顯示的區(qū)域,并使主圖像無(wú)效以使其重繪。以下代碼顯示了主圖片的Paint事件處理程序,該處理程序處理該重繪。

// Draw the viewing area.
private void picWhole_Paint(object sender, PaintEventArgs e)
{
    // Scale so we can draw in the full scale coordinates.
    e.Graphics.ScaleTransform(ScaleX, ScaleY);
 
    // Draw the viewing area using the original image.
    e.Graphics.DrawImage(OriginalImage, ViewingRectangle, 
        ViewingRectangle, GraphicsUnit.Pixel);
    //e.Graphics.DrawRectangle(Pens.Red, ViewingRectangle);
}

此代碼使用變換,因此它可以使用全尺寸圖像的坐標(biāo)而不是主圖像(您可能還記得,主圖像是縮小比例的)的坐標(biāo)進(jìn)行繪制。然后,它將原始全尺寸圖像的一部分復(fù)制到主圖像上,以顯示鼠標(biāo)周圍的區(qū)域。結(jié)果是主圖像除了此區(qū)域外都被陰影化,此區(qū)域以原始亮度繪制。取消注釋此方法中的最后一行,以在主圖像的特寫區(qū)域周圍繪制一個(gè)紅色矩形。

我承認(rèn)這是一個(gè)令人困惑的例子,但它的效果非???,所以我鼓勵(lì)你下載并嘗試一下。如果你對(duì)代碼進(jìn)行一些實(shí)驗(yàn),你就能弄清楚它是如何工作的。(土衛(wèi)二是一顆特別奇怪的衛(wèi)星?。?/p>

到此這篇關(guān)于基于C#一個(gè)制作圖像的特寫窗口的文章就介紹到這了,更多相關(guān)C#圖像特寫窗口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# 使用NModbus的實(shí)現(xiàn)示例

    C# 使用NModbus的實(shí)現(xiàn)示例

    本文主要介紹了在C#中使用NModbus4庫(kù)進(jìn)行Modbus通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • C#提示:“在證書存儲(chǔ)區(qū)中找不到清單簽名證書”的解決方法

    C#提示:“在證書存儲(chǔ)區(qū)中找不到清單簽名證書”的解決方法

    這篇文章主要介紹了C#提示:“在證書存儲(chǔ)區(qū)中找不到清單簽名證書”的解決方法,分析了幾種常見的解決方案供大家選擇使用,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • 驗(yàn)證本機(jī)的excel版本的C#代碼

    驗(yàn)證本機(jī)的excel版本的C#代碼

    安裝的excel的版本,0為沒有安裝,大于1說(shuō)明安裝了多個(gè). 需要的朋友可以參考下。
    2011-08-08
  • C# 實(shí)現(xiàn)抓包的實(shí)例代碼

    C# 實(shí)現(xiàn)抓包的實(shí)例代碼

    這篇文章主要介紹了C# 實(shí)現(xiàn)抓包的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 在C#中優(yōu)化JPEG壓縮級(jí)別和文件大小方式

    在C#中優(yōu)化JPEG壓縮級(jí)別和文件大小方式

    文章介紹了如何在C#中優(yōu)化JPEG壓縮級(jí)別和文件大小,通過(guò)使用文件菜單加載圖像文件并選擇不同的壓縮級(jí)別,程序?qū)D像保存為臨時(shí)文件并顯示生成的圖像和文件大小,關(guān)鍵方法SaveJpg使用給定的壓縮指數(shù)保存JPG文件,并通過(guò)GetEncoderInfo獲取編碼器信息
    2025-01-01
  • C#中字符串的一般性和特殊性

    C#中字符串的一般性和特殊性

    本篇文章主要介紹了C#中字符串的一般性和特殊性的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • unity實(shí)現(xiàn)多點(diǎn)觸控代碼

    unity實(shí)現(xiàn)多點(diǎn)觸控代碼

    這篇文章主要介紹了unity實(shí)現(xiàn)多點(diǎn)觸控代碼,我最近在學(xué)習(xí)Unity游戲引擎。先從Unity平面開始,本章介紹Unity 平面上的多點(diǎn)觸摸。有需要的小伙伴參考下。
    2015-03-03
  • winform去掉右上角關(guān)閉按鈕的方法

    winform去掉右上角關(guān)閉按鈕的方法

    這篇文章主要介紹了winform去掉右上角關(guān)閉按鈕的方法,需要的朋友可以參考下
    2014-02-02
  • 如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程

    這篇文章主要給大家介紹了關(guān)于如何利用c#實(shí)現(xiàn)通用守護(hù)進(jìn)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • .net的序列化與反序列化實(shí)例

    .net的序列化與反序列化實(shí)例

    這篇文章主要介紹了.net的序列化與反序列化實(shí)例,詳細(xì)講述了.net序列化與反序列化的基本原理與用法實(shí)例,具有很好的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10

最新評(píng)論