Тема: Как в XML документ добавить изображение
На днях понадобилось в xml установить вложенную картинку. Оказалось довольно все просто, необходимо в стилях xml указать цвет и расположение попиксельно всего изображения.
img { display: table;
width: 1px;
height: 1px;
background: transparent;
box-shadow:0px 0px #FFFFFF, 0px 1px #FFFFFF, 0px 2px #FFFFFF,.............}
для получения цвета и расположения каждого пикселя была написана простенькая программка:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Format_Img
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Bitmap bmp;
//подключить картинку
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog()==DialogResult.OK)
{
pictureBox1.ImageLocation = openFileDialog1.FileName;//загружаем цветную картинку
bmp = new Bitmap(openFileDialog1.FileName);
px_cvet.Text = vivod(bmp);//вывод координаты и цвет пикселя
B_W();//делаем черно-белую картинку
}
}
//вывести результат
private string vivod(Bitmap bmp2)
{
string str = "";
for (int x = 0; x < bmp2.Width; x++)
{
for (int y = 0; y < bmp2.Height; y++)
{
string hex=RGB2Hex(bmp2.GetPixel(x, y).R.ToString(), bmp2.GetPixel(x, y).G.ToString(), bmp2.GetPixel(x, y).B.ToString());
if (hex != "#FFFFFF")
{
str += x.ToString() + "px " + y.ToString() + "px " + hex + ", ";
}
}
}
str = str.Substring(0, str.Length - 2) + ";";
return str;
}
//перевод RGB
public string RGB2Hex(string R, string G, string B)
{
string Color1 = "#";
R = Convert.ToString(Convert.ToByte(R));
G = Convert.ToString(Convert.ToByte(G));
B = Convert.ToString(Convert.ToByte(B));
Color1 += Convert.ToInt32(R).ToString("X2");
Color1 += Convert.ToInt32(G).ToString("X2");
Color1 += Convert.ToInt32(B).ToString("X2");
return Color1;
}
//черно белая
private void B_W()
{
// делаем пустую картинку того же размера
Bitmap bmp3 = new Bitmap(bmp.Width, bmp.Height, bmp.PixelFormat);
for (int y = 0; y < bmp.Height; ++y)
{
for (int x = 0; x < bmp.Width; ++x)
{
Color c = bmp.GetPixel(x, y);
byte rgb = (byte)(0.3 * c.R + 0.59 * c.G + 0.11 * c.B);
bmp3.SetPixel(x, y, Color.FromArgb(c.A, rgb, rgb, rgb));
}
}
pictureBox2.Image = bmp3;
px_bw.Text = vivod(bmp3);//вывод координаты и цвет пикселя
}
}
}