久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從 C# 中的位圖創(chuàng)建一個(gè)全新的位圖副本

Creating a completely new copy of bitmap from a bitmap in C#(從 C# 中的位圖創(chuàng)建一個(gè)全新的位圖副本)
本文介紹了從 C# 中的位圖創(chuàng)建一個(gè)全新的位圖副本的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我需要另一個(gè)位圖的位圖深層副本.現(xiàn)在,大多數(shù)解決方案都說(shuō)類(lèi)似this,這不是深拷貝.這意味著當(dāng)我鎖定原始位圖時(shí),副本也會(huì)被鎖定,因?yàn)榭寺∈窃嘉粓D的淺拷貝.現(xiàn)在以下似乎對(duì)我有用,但我不確定這是否適用于所有情況.

I need a deep copy of bitmap from another bitmap. Now, most of the solutions say something like this, which is not a deep copy. Meaning that when I lock the original bitmap, then the copy gets locked too, as the clone is a shallow copy of the original bitmap. Now the following seems to work for me, but I am not sure that will work in all cases.

public static Bitmap GetCopyOf(Bitmap originalImage)
{
    Rectangle rect = new Rectangle(0, 0, originalImage.Width, originalImage.Height);
    Bitmap retrunImage = new Bitmap(originalImage.Width, originalImage.Height, originalImage.PixelFormat);
    BitmapData srcData = originalImage.LockBits(rect, ImageLockMode.ReadOnly, originalImage.PixelFormat);
    BitmapData destData = retrunImage.LockBits(rect, ImageLockMode.WriteOnly, originalImage.PixelFormat);
    int dataLength = Math.Abs(srcData.Stride) * srcData.Height;
    byte[] data = new byte[dataLength];
    Marshal.Copy(srcData.Scan0, data, 0, data.Length);
    Marshal.Copy(data, 0, destData.Scan0, data.Length);
    destData.Stride = srcData.Stride;
    if (originalImage.Palette.Entries.Length != 0)
        retrunImage.Palette = originalImage.Palette;
    originalImage.UnlockBits(srcData);
    retrunImage.UnlockBits(destData);
    return retrunImage;
}

我需要更好、更優(yōu)雅的方式來(lái)做到這一點(diǎn).否則,請(qǐng)指出一些上述代碼可能會(huì)失敗的情況.TIA

I need better and more elegant way of doing this. Otherwise, just point me some cases where the above code may fail. TIA

推薦答案

我想我已經(jīng)通過(guò)使用這個(gè)片段解決了這個(gè)問(wèn)題.這個(gè)想法是由 Lanorkin 在評(píng)論中給出的,并且實(shí)現(xiàn)了 此處.希望這會(huì)在以后對(duì)某人有所幫助.

I think I have solved the problem by using this snippet. The idea was given by Lanorkin in the comment and the implementaion is found here. Hope this will help somebody later.

public static T Clone<T>(T source)
{
    if (!typeof(T).IsSerializable)
    {
        throw new ArgumentException("The type must be serializable.", "source");
    }

    // Don't serialize a null object, simply return the default for that object
    if (Object.ReferenceEquals(source, null))
    {
        return default(T);
    }

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new MemoryStream();
    using (stream)
    {
        formatter.Serialize(stream, source);
        stream.Seek(0, SeekOrigin.Begin);
        return (T)formatter.Deserialize(stream);
    }
}

這篇關(guān)于從 C# 中的位圖創(chuàng)建一個(gè)全新的位圖副本的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Right-click on a Listbox in a Silverlight 4 app(右鍵單擊 Silverlight 4 應(yīng)用程序中的列表框)
WPF c# webbrowser scrolls over top menu(WPF c# webbrowser 在頂部菜單上滾動(dòng))
C# Console app - How do I make an interactive menu?(C# 控制臺(tái)應(yīng)用程序 - 如何制作交互式菜單?)
How to avoid duplicate form creation in .NET Windows Forms?(如何避免在 .NET Windows Forms 中創(chuàng)建重復(fù)的表單?)
UI Automation Control Desktop Application and Click on Menu Strip(UI自動(dòng)化控制桌面應(yīng)用程序并單擊菜單條)
Removing thin border around the menuitems(刪除菜單項(xiàng)周?chē)募?xì)邊框)
主站蜘蛛池模板: 亚洲欧美在线观看 | 91久久久久 | 国产精品国产馆在线真实露脸 | 极品销魂美女一区二区 | 久久黄网 | 一区二区精品 | 福利成人 | 亚洲精品视频一区二区三区 | 国产欧美一区二区三区免费 | 成人免费观看视频 | 欧美日韩国产中文 | 欧美片网站免费 | 丁香婷婷综合激情五月色 | 91视频网 | 欧美中文在线 | 91精品国产一区 | 精品中文字幕一区二区三区 | 亚洲免费三区 | 久久久久国产一级毛片 | 欧美一级毛片免费观看 | 亚洲国产一区二区三区, | 欧美精品在线一区 | 中午字幕在线观看 | 中文字幕日韩欧美 | 亚洲成人高清 | 免费一区 | 祝你幸福电影在线观看 | av网站免费观看 | 男女羞羞视频在线看 | 日韩成人中文字幕 | 欧美中文字幕 | 国产午夜视频 | 亚洲a视| av一区二区在线观看 | 中文字幕日韩一区 | 国产精品毛片一区二区三区 | 欧美久久视频 | 国产精品久久久久久久久久 | 久久精品91 | 国产三级电影网站 | 国产免费人成xvideos视频 |