Ben JPEG dosyası yüklemek ve görüntüden.NET Bitmap.Load yöntemi farklı bilgisayarlarda farklı bir sonuç üretmek
C# Kod tüm siyah ve beyaz pikselleri silmeyi deneyin: Ben bulmaya Bundan sonra
...
m_SrcImage = new Bitmap(imagePath);
Rectangle r = new Rectangle(0, 0, m_SrcImage.Width, m_SrcImage.Height);
BitmapData bd = m_SrcImage.LockBits(r, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
//Load Colors
int[] colours = new int[m_SrcImage.Width * m_SrcImage.Height];
Marshal.Copy(bd.Scan0, colours, 0, colours.Length);
m_SrcImage.UnlockBits(bd);
int len = colours.Length;
List<Color> result = new List<Color>(len);
for (int i = 0; i < len; ++i)
{
uint w = ((uint)colours[i]) & 0x00FFFFFF; //Delete alpha-channel
if (w != 0x00000000 && w != 0x00FFFFFF) //Check pixel is not black or white
{
w |= 0xFF000000; //Return alpha channel
result.Add(Color.FromArgb((int)w));
}
}
...
Bu kod tarafından listelenen benzersiz renkler Bu kod tarafından listelenen benzersiz renkler
result.Sort((a, b) =>
{
return a.R != b.R ? a.R - b.R :
a.G != b.G ? a.G - b.G :
a.B != b.B ? a.B - b.B :
0;
});
List<Color> uniqueColors = new List<Color>(result.Count);
Color rgbTemp = result[0];
for (int i = 0; i < len; ++i)
{
if (rgbTemp == result[i])
{
continue;
}
uniqueColors.Add(rgbTemp);
rgbTemp = result[i];
}
uniqueColors.Add(rgbTemp);
Ve bu kod aynı görüntüdeki farklı makinelerde farklı sonuçlar üretir! Örneğin
, this image üzerinde ürettiği:
- 43198 benzersiz renkler XP SP3 .NET sürümü ile .NET sürümü ile Win7 Ultimate 4
- 43168 benzersiz renkler 4,5
Asgari test projesi download here yapabilirsiniz. Sadece seçilen görüntüyü açar ve benzersiz renklerle txt dosyası üretir.
Bir gerçek daha. Bazı pikseller farklı makinelerde farklı okunur. Txt dosyalarını notepad ++ ile karşılaştırdım ve bazı piksellerin farklı RGB bileşenlerine sahip olduğunu gösteriyor. Her bileşen için fark, örn.
- Win7 piksel: 255 200 100
- WinXP piksel: bu yazı
stackoverflow.com/questions/2419598/why-might-different- okuma 254 199 99
bilgisayar-hesapla-farklı-aritmetik-sonuçları-in-vb-net
(Üzgünüm, normal bağlantı için yeterli miktarda bekletme yok).
... ama nasıl düzeltileceği hakkında bilgi yoktu.
Proje VS 2015 Commumity Sürümü OS Windows 7 ile makinede .NET 4 İstemci profili için derlendi.
Resimleri yüklemek için bize giriş yapmanıza gerek olmayan ücretsiz bir yükleme hizmeti seçmelisiniz – TaW
@TaW Image imgur.com'a taşı ve test projesini github'a taşı –
Teşekkürler. Ancak, Lasse'nin cevabının doğru olduğunu düşünüyorum: JPeg, görüntüyü mutlak doğrulukla yeniden üretmek anlamına gelmez. Gerçekten buna ihtiyacınız varsa, PNG'ye geçin! – TaW