最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

特寫(xiě)圖實(shí)際上只是原始圖像的全尺寸副本。(“主”圖像是較小比例的相同圖像。)要顯示特寫(xiě)圖,程序會(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)周?chē)鷧^(qū)域的特寫(xiě)。

// 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)周?chē)膮^(qū)域在哪里。如果該區(qū)域部分位于主圖像之外,則代碼會(huì)調(diào)整其 X 和 Y 坐標(biāo),使該區(qū)域位于主圖像內(nèi)。這樣可以讓特寫(xiě)顯示盡可能多的圖像。

代碼將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)周?chē)膮^(qū)域。結(jié)果是主圖像除了此區(qū)域外都被陰影化,此區(qū)域以原始亮度繪制。取消注釋此方法中的最后一行,以在主圖像的特寫(xiě)區(qū)域周?chē)L制一個(gè)紅色矩形。

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

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

相關(guān)文章

  • C#多線(xiàn)程等待所有子線(xiàn)程結(jié)束的示例

    C#多線(xiàn)程等待所有子線(xiàn)程結(jié)束的示例

    這篇文章主要介紹了C#多線(xiàn)程等待所有子線(xiàn)程結(jié)束的示例,幫助大家更好的理解和學(xué)習(xí)c#編程語(yǔ)言,感興趣的朋友可以了解下
    2020-12-12
  • C#?泛型集合類(lèi)List<T>使用總結(jié)

    C#?泛型集合類(lèi)List<T>使用總結(jié)

    本文主要主要介紹了C#?泛型集合類(lèi)List<T>使用總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • C#利用FileSystemWatcher實(shí)時(shí)監(jiān)控文件的增加,修改,重命名和刪除

    C#利用FileSystemWatcher實(shí)時(shí)監(jiān)控文件的增加,修改,重命名和刪除

    好多時(shí)候,我們都需要知道某些目錄下的文件什么時(shí)候被修改、刪除過(guò)等。本文將利用FileSystemWatcher實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的增加,修改,重命名和刪除,感興趣的可以了解一下
    2022-08-08
  • C#實(shí)現(xiàn)跨線(xiàn)程操作控件方法

    C#實(shí)現(xiàn)跨線(xiàn)程操作控件方法

    這篇文章主要介紹了C#實(shí)現(xiàn)跨線(xiàn)程操作控件方法,主要采用異步訪(fǎng)問(wèn)方式實(shí)現(xiàn),需要的朋友可以參考下
    2014-10-10
  • 在C#?WebAPI中實(shí)現(xiàn)多版本控制的方法

    在C#?WebAPI中實(shí)現(xiàn)多版本控制的方法

    隨著應(yīng)用程序的不斷演化和功能的不斷擴(kuò)展,API?版本控制成為了開(kāi)發(fā)和維護(hù)?WebAPI?時(shí)不可或缺的一部分,在本文中,我們將介紹如何在現(xiàn)代?C#?WebAPI?項(xiàng)目中有效地實(shí)施?API?版本控制,并分享一些最佳實(shí)踐,需要的朋友可以參考下
    2025-11-11
  • c++ 中的關(guān)鍵字 const含義詳解

    c++ 中的關(guān)鍵字 const含義詳解

    C++ 中的 const 關(guān)鍵字是一個(gè)強(qiáng)大的工具,主要用于定義“只讀”變量或?qū)ο?告訴編譯器和程序員,被其修飾的內(nèi)容不應(yīng)被改變,本文給大家介紹c++ 中的關(guān)鍵字 const含義,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • C#中的yield關(guān)鍵字詳解

    C#中的yield關(guān)鍵字詳解

    本文詳細(xì)講解了C#中的yield關(guān)鍵字,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類(lèi)型轉(zhuǎn)換

    淺析WPF中Binding的數(shù)據(jù)校驗(yàn)和類(lèi)型轉(zhuǎn)換

    在WPF開(kāi)發(fā)中,Binding實(shí)現(xiàn)了數(shù)據(jù)在Source和Target之間的傳遞和流通,那在WPF開(kāi)發(fā)中,如何實(shí)現(xiàn)數(shù)據(jù)的校驗(yàn)和類(lèi)型轉(zhuǎn)換呢,下面就跟隨小編一起學(xué)習(xí)一下吧
    2024-03-03
  • c# 實(shí)現(xiàn)發(fā)送郵件到指定郵箱

    c# 實(shí)現(xiàn)發(fā)送郵件到指定郵箱

    這篇文章主要介紹了c# 如何實(shí)現(xiàn)發(fā)送郵件到指定郵箱,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#獲取文件、文件夾和驅(qū)動(dòng)器的信息示例詳解

    C#獲取文件、文件夾和驅(qū)動(dòng)器的信息示例詳解

    在C#中,文件、文件夾和驅(qū)動(dòng)器是文件系統(tǒng)操作的基本元素,了解如何獲取這些元素的信息對(duì)于開(kāi)發(fā)文件處理和管理工具至關(guān)重要,本文將詳細(xì)介紹如何在C#中獲取有關(guān)文件、文件夾和驅(qū)動(dòng)器的信息,并提供相應(yīng)的示例,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

长宁区| 读书| 丹棱县| 仲巴县| 白水县| 唐海县| 英德市| 金寨县| 崇义县| 海阳市| 满城县| 鹿邑县| 平舆县| 东城区| 萍乡市| 长兴县| 新巴尔虎左旗| 吴堡县| 汶上县| 阜宁县| 乌拉特前旗| 石首市| 闵行区| 石棉县| 雷州市| 平湖市| 黄平县| 贵定县| 延寿县| 唐山市| 成都市| 虹口区| 云阳县| 唐海县| 景德镇市| 肇州县| 永修县| 岐山县| 岑溪市| 福州市| 卓尼县|