Tôi đã tạo một trình chỉnh sửa bản đồ 2d cho trò chơi platformer hình vuông của mình, khi tôi nhận ra mình có thể sử dụng trình chỉnh sửa hình ảnh với khả năng vẽ lại các pixel liền kề và nhiều hơn nữa, vì vậy tôi đã thử đọc ứng dụng sau đó sẽ chuyển đổi nó thành định dạng lightweigh.Làm thế nào tôi có thể đọc các giá trị của pixel ảnh dưới dạng RGB thành mảng 2d?
Tôi không chắc chắn nếu sử dụng định dạng bitmap là bắt buộc đối với điều đó, nhưng tôi đoán, việc đọc một pixel cụ thể sẽ dễ dàng hơn so với PNG chẳng hạn.
Vì vậy, mục tiêu của tôi là mở một hình ảnh, lặp qua từng pixel, tìm những màu phù hợp với sơ đồ khối của tôi và đặt lát tương ứng vào mảng khối.
Lưu ý: Tôi đã có định dạng lightweigh, vì vậy tôi chỉ cần đọc giá trị pixel vào mảng.
Giải pháp: phác thảo của tôi trông như thế này:
Bitmap myBitmap = new Bitmap(@"input.png");
for (int x = 0; x < myBitmap.Width; x++)
{
for (int y = 0; y < myBitmap.Height; y++)
{
Color pixelColor = myBitmap.GetPixel(x, y);
// things we do with pixelColor
}
}
Ví dụ 2:
Bitmap myBitmap = new Bitmap(@"input.png");
for (int x = 0; x < myBitmap.Width; x++)
{
for (int y = 0; y < myBitmap.Height; y++)
{
// Get the color of a pixel within myBitmap.
Color pixelColor = myBitmap.GetPixel(x, y);
string pixelColorStringValue =
pixelColor.R.ToString("D3") + " " +
pixelColor.G.ToString("D3") + " " +
pixelColor.B.ToString("D3") + ", ";
switch (pixelColorStringValue)
{
case "255 255 255":
{
// white pixel
break;
}
case "000 000 000":
{
// black pixel
break;
}
}
}
}
Lưu ý phụ: chuyển/trường hợp trên chuỗi không có giá trị. Bên trong nó chỉ là so sánh chuỗi. Chỉ cần so sánh các giá trị RGB thực tế là ràng buộc để tải được hiệu quả hơn. – Nyerguds
@Nyerguds đây là những năm trước vì vậy tôi không nhớ tại sao tôi đã làm theo cách đó. Tôi chắc chắn có một cách tốt hơn để làm mọi thứ trong câu hỏi này, và nếu tôi phải giải quyết bất cứ vấn đề gì tôi đã có trở lại thì hôm nay, mã sẽ hoàn toàn khác. – user1306322
Hehe. Đó là cách nó thường đi khi nhìn lại mã cũ, tôi đoán :) – Nyerguds