tôi cố gắng để tải tập tin JPEG và xóa tất cả các pixel đen và trắng từ ảnhNET phương pháp Bitmap.Load sản xuất kết quả khác nhau trên các máy tính khác nhau
C# Code:
...
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));
}
}
...
Sau đó tôi cố gắng tìm các màu duy nhất trong Danh sách theo mã này
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);
Và mã này tạo ra các kết quả khác nhau trên các máy khác nhau trên cùng một hình ảnh!
Ví dụ, trên this image nó tạo ra:
màu- 43198 độc đáo trên XP SP3 với phiên bản .NET 4
- 43.168 màu sắc độc đáo trên Win7 Ultimate với phiên bản NET 4,5
tối thiểu dự án thử nghiệm bạn có thể download here. Nó chỉ mở ra hình ảnh được chọn và tạo ra tập tin txt với màu sắc độc đáo.
Một thực tế khác. Một số pixel được đọc khác nhau trên các máy khác nhau. Tôi so sánh các tệp txt với notepad ++ và nó cho thấy rằng một số pixel có các thành phần RGB khác nhau. Sự khác biệt là 1 cho mỗi thành phần, ví dụ:
- Win7 điểm ảnh: 255 200 100
- WinXP điểm ảnh: 254 199 99
Tôi đã đọc bài này
stackoverflow.com/questions/2419598/why-might-different- máy tính-tính-khác nhau-số học-kết quả-in-vb-net
(xin lỗi, tôi chưa đủ số tiền cho liên kết thông thường).
... nhưng không có thông tin về cách khắc phục.
Dự án đã được biên soạn cho .NET 4 Hồ sơ khách hàng trên máy tính có hệ điều hành Windows 7 trong phiên bản 2015 Commumity VS.
Để tải lên hình ảnh, bạn nên chọn dịch vụ tải lên miễn phí không yêu cầu chúng tôi đăng nhập – TaW
@TaW Di chuyển hình ảnh đến imgur.com và di chuyển dự án thử nghiệm sang github –
Cảm ơn bạn. Tuy nhiên tôi đoán câu trả lời của Lasse là chính xác: JPeg không có nghĩa là tái tạo hình ảnh với độ chính xác tuyệt đối. Hãy chuyển sang PNG nếu bạn thực sự cần điều đó! – TaW