在磁盤上保存位圖後,會丟失詳細信息。相同的圖像可以有不同的尺寸。 如果圖像具有足夠的尺寸,我們有一個很好的畫面: http://prntscr.com/6g5ku0 否則圖像細節丟失 http://prntscr.com/6g5i09 是否有保存位圖質量無細節丟失任何算法? 我正在使用C#。如何防止在保存/縮放位圖後丟失行?
回答
一般來說這是不可能的。
但是,對於一些特殊情況,可以採取一些方法來解決基本規則。
如果你的圖片是典型的,那麼你可以試試這個:
創建一個由原始圖像的1個像素偏移正確的和/或拉下四次的重疊圖像。確保您使用DrawImage
方法的SourceOverlay
選項。
現在你可以減少一半的尺寸而不會丟失任何線條。
當然,基本規則仍然適用,如果您可以忍受疊加過程中發生的損失,解決方法纔可以工作:這裏所有小(1像素)的空白都用黑色填充。沒有黑線丟失,但很多白色的空白。
如果這是可以接受的,罰款,如果沒有,那麼基本規則表示:你可以在不降低一個位圖的一個像素的大小..
這裏有一個例子:首先是原單,那麼覆蓋層和最後的縮小圖像:
該代碼是直接的。唯一要注意的是,爲了覆蓋圖像的背景應該是透明的。我通過在整個圖像中將像素爲(0,0)
的顏色設置爲透明來採用快捷方式。這如果)該像素確實是背景色和b)的背景是唯一一個顏色只會工作..
private void button2_Click(object sender, EventArgs e)
{
Bitmap bmp1 = new Bitmap("D:\\fineline.png");
pictureBox1.Image = bmp1;
Bitmap bmp2 = (Bitmap)bmp1.Clone();
bmp2.MakeTransparent(bmp2.GetPixel(0, 0));
Bitmap bmp3 = (Bitmap)bmp2.Clone();
using (Graphics G = Graphics.FromImage(bmp3))
{
G.CompositingMode = CompositingMode.SourceOver;
G.CompositingQuality = CompositingQuality.HighQuality;
G.DrawImage(bmp2, 0, 1);
G.DrawImage(bmp2, 1, 1);
G.DrawImage(bmp2, 1, 0);
}
pictureBox2.Image = bmp3;
Bitmap bmp4 = new Bitmap(bmp3.Width/2, bmp3.Height/2);
using (Graphics G = Graphics.FromImage(bmp4))
{
G.Clear(bmp1.GetPixel(0, 0));
G.DrawImage(bmp3, 0, 0, bmp4.Width, bmp4.Height);
}
pictureBox3.Image = bmp4;
// do dispose of all bitmaps when no longer needed!!
bmp2.Dispose(); // in the test the others still sit in the PictureBoxes
}
這是正確的方法。非常感謝。 – MaksimNikicin 2015-03-13 10:45:18
確保在處理完畢後處理位圖! – TaW 2015-03-13 14:28:02
- 1. 防止縮略圖縮放?
- 2. 如何防止圖像縮放窗口
- 3. 縮放畫布後位圖質量丟失
- 4. 如何防止或關閉位圖的direct2d「自動縮放」?
- 5. Android MapView:如何在animateTo和zoom之後保存位置/縮放?
- 6. 如何防止在Android Imageview中縮放?
- 7. 如何防止在Android/AndEngine中保存位圖時出現IllegalArgumentException?
- 8. 如何在共享首選項中保存縮放位圖?
- 9. 如何防止NSMutableArray丟失數據?
- 10. DTML:如何防止格式化丟失
- 11. 如何防止使用SpriteKit進行圖像縮放?
- 12. 在Raphael中防止縮放
- 13. 如何防止jqGrid在保存後恢復行
- 14. 如何縮放後的圖像保存在iPhone提前
- 15. 防止位圖被寫入正在縮放的磁盤
- 16. 防止圖案在對象縮放時縮放
- 17. 如何在Android中的位圖壓縮後保存Exif數據
- 18. Fiware:防止數據丟失
- 19. 防止數據丟失onUpgrade
- 20. 防止信息丟失
- 21. 如何保存縮放的圖像
- 22. 黑盒子,丟失或縮放圖像
- 23. 縮放圖像而不丟失質量
- 24. Flex mx:axisrenderer如何防止縮放標籤
- 25. 如何防止軸自動縮放?
- 26. C#MapControl如何防止圖像在縮放時改變大小?
- 27. 如何防止圖像在家長的邊界外縮放?
- 28. Android:如何防止圖像在ImageView或ImageButton中縮放?
- 29. 如何防止圖像在縮放Flash時變形
- 30. 防止在ImageView執行時創建的位圖上的縮放比例 - Android
無法保存的圖像分辨率較低,但把所有的細節,這是完全不可能的。當你改變分辨率(在這種情況下,我的意思是像素數的寬度和高度),你需要做一些重採樣,從原始圖像中挑選出像素或計算新的。無論哪種方式都不可能讓所有的像素,這意味着細節將會丟失。 – 2015-03-13 08:37:27
這不是讓它失去細節的保存部分。這是縮小尺寸時的尺寸。 – Luaan 2015-03-13 08:37:30
好的,但可能是我能在原創的基礎上用必要的分辨率製作新圖像嗎? – MaksimNikicin 2015-03-13 08:47:19