Tôi đang làm việc với Bitmap C# và tự hỏi cách chuyển đổi hình ảnh png màu thành chỉ một màu. Tôi muốn tất cả các màu có thể nhìn thấy trong hình ảnh trở thành màu trắng. Các bộ phận trong suốt nên vẫn trong suốt. Tôi sẽ hiển thị những lần này một nền màu xám.Chuyển đổi màu png trong suốt thành màu đơn
Trả lời
Các câu trả lời khác hữu ích và giúp tôi tiếp tục, cảm ơn rất nhiều. Tôi không thể làm cho họ làm việc mặc dù, không chắc chắn lý do tại sao. Nhưng tôi cũng phát hiện ra rằng tôi muốn giữ nguyên giá trị alpha ban đầu của các pixel, làm cho các cạnh trơn tru. Đây là những gì tôi nghĩ ra.
for (int x = 0; x < bitmap.Width; x++)
{
for (int y = 0; y < bitmap.Height; y++)
{
Color bitColor = bitmap.GetPixel(x, y);
//Sets all the pixels to white but with the original alpha value
bitmap.SetPixel(x, y, Color.FromArgb(bitColor.A, 255, 255, 255));
}
}
Đây là một bãi chứa màn hình của kết quả phóng đại một vài lần (bản gốc trên đầu trang): alt text http://codeodyssey.se/upload/white-transparent.png
Hoạt động nhờ tuyệt vời! – CareTaker22
thử đoạn mã sau:
void Test()
{
Bitmap bmp = new Bitmap(50, 50);//you will load it from file or resource
Color c = Color.Green;//transparent color
//loop height and width.
// YOU MAY HAVE TO CONVERT IT TO Height X VerticalResolution and
// Width X HorizontalResolution
for (int i = 0; i < bmp.Height; i++)
{
for (int j = 0; j < bmp.Width; j++)
{
var p = bmp.GetPixel(j, i);//get pixle at point
//if pixle color not equals transparent
if(!c.Equals(Color.FromArgb(p.ToArgb())))
{
//set it to white
bmp.SetPixel(j,i,Color.White);
}
}
}
}
PS: đây không phải là thử nghiệm và không có cách nào tối ưu
Nếu hình ảnh không sử dụng kênh alpha cho minh bạch thì sau đây sẽ làm:
Bitmap image;
for (int x = 0; x < image.Width; x++)
{
for (int y = 0; y < image.Height; y++)
{
if (image.GetPixel(x, y) != Color.Transparent)
{
image.SetPixel(x, y, Color.White);
}
}
}
SetPixel
chỉ là về cách chậm nhất có thể để làm điều đó. Bạn có thể sử dụng một ColorMatrix
thay vì:
var newImage = new Bitmap(original.Width, original.Height,
original.PixelFormat);
using (var g = Graphics.FromImage(newImage)) {
var matrix = new ColorMatrix(new[] {
new float[] { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f },
new float[] { 0.0f, 1.0f, 0.0f, 0.0f, 0.0f },
new float[] { 0.0f, 0.0f, 1.0f, 0.0f, 0.0f },
new float[] { 0.0f, 0.0f, 0.0f, 1.0f, 0.0f },
new float[] { 1.0f, 1.0f, 1.0f, 0.0f, 1.0f }
});
var attributes = new ImageAttributes();
attributes.SetColorMatrix(matrix);
g.DrawImage(original,
new Rectangle(0, 0, original.Width, original.Height),
0, 0, original.Width, original.Height,
GraphicsUnit.Pixel, attributes);
}
Chắc chắn thanh lịch hơn, với lợi ích bổ sung là yêu cầu một người học toàn bộ không gian màu mới, một khái niệm mới về thao tác màu sắc và sử dụng kiến thức mới để hiểu những gì bạn vừa làm. :) Tôi thích nó! –
PS: Cú pháp C# của bạn là tốt, miễn là 'using System.Drawing;' và 'sử dụng System.Drawing.Imaging;' được đặt ra. –
- 1. Bitmap của Android: Chuyển đổi pixel trong suốt thành màu
- 2. Chuyển đổi PDF thành PNG trong suốt với GhostScript
- 3. Chuyển đổi màu thành ConsoleColor?
- 4. Thay đổi hình ảnh png trắng thành màu cụ thể
- 5. Thay đổi màu của các phần không trong suốt của png trong Java
- 6. Chuyển đổi màu RGBA thành mã màu HTML
- 7. Android: Chuyển đổi hình ảnh màu thành màu xám
- 8. Chuyển đổi chuỗi màu hex thành màu RGB
- 9. Chuyển chuỗi màu HEX thành Màu?
- 10. Nền trong suốt chuyển sang màu đen trong WPF
- 11. Flexcriptcript: Chuyển đổi # màu thành uint
- 12. Màu nền CSS trong suốt
- 13. UItextview Màu trong suốt IOS
- 14. Chỉ màu tô màu trắng trong suốt ở UIView
- 15. Cách tạo màu trong suốt trong BufferedImage và lưu dưới dạng PNG
- 16. Chuyển đổi màu trong WPF
- 17. Chuyển đổi PNG thành JPEG
- 18. Hiển thị màu nền thông qua PNG trong suốt trên tài liệu?
- 19. libGDX: xử lý màu đầu tiên trong bảng màu như màu trong suốt
- 20. Cách đơn giản nhất để chuyển đổi Màu thành chuỗi như #XXXXXX thành System.Windows.Media.Brush
- 21. Chuyển chuỗi thành Màu trong C#
- 22. ImageMagick: chuyển đổi tiếp tục thay đổi không gian màu thành Màu xám. Làm thế nào để bảo vệ không gian màu sRGB?
- 23. Chuyển đổi hình ảnh thành 2 màu trong Java
- 24. Làm cách nào để chuyển đổi hình ảnh màu thành màu xám trong MATLAB?
- 25. màu trong suốt trong javascript D3.js
- 26. Màu sai khi chuyển đổi hình ảnh TIFF sang PNG trong ImageMagick
- 27. Chuyển đổi SVG thành PNG trong suốt với khử răng cưa, sử dụng ImageMagick
- 28. Chuyển đổi RGBA bằng màu cơ bản thành RGB?
- 29. Nền trong suốt hiển thị màu đen
- 30. tạo ô với màu trong suốt ggplot2
thể trùng lặp của [GDI +: Đặt tất cả các điểm ảnh màu được trong khi vẫn giữ giá trị alpha hiện] (http://stackoverflow.com/questions/2510013/gdi-set-all- pixel-to-given-color-while-retaining-existing-alpha-value) –
Có bất kỳ điều gì tôi có thể thêm vào câu trả lời của tôi, vì bạn chưa chấp nhận bất kỳ câu trả lời nào không? – Cloudanger
Xin chào và xin lỗi vì trả lời muộn. Tôi đã thử mã ngay bây giờ và tôi không thể làm cho nó hoạt động. Tất cả các điểm ảnh của tôi chuyển sang màu trắng và nó không để lại các điểm ảnh trong suốt của phần còn lại của png. – jesperlind