Javascript 如何使用砖块绘制图像。图像可以通过上传器上传。

Javascript 如何使用砖块绘制图像。图像可以通过上传器上传。,javascript,asp.net,Javascript,Asp.net,我正在开发一个web应用程序,它有一个砖块编辑器,用于使用砖块绘制标志。直到我能用字符和数字画符号。现在我尝试在砖块编辑器上绘制图像 我想要像这样的东西: 我有一个javascript和ajax处理程序解决方案 第一步。在html控件上绘制图像 第二步。将图像转换为base64并传递给ajax处理程序 函数GenerateImage() { 私有字符串ReadJpeg(字符串ImgName) { XmlDocument xml=新的XmlDocument() xmlementroot=xml.

我正在开发一个web应用程序,它有一个砖块编辑器,用于使用砖块绘制标志。直到我能用字符和数字画符号。现在我尝试在砖块编辑器上绘制图像

我想要像这样的东西:


我有一个javascript和ajax处理程序解决方案

第一步。在html控件上绘制图像

第二步。将图像转换为base64并传递给ajax处理程序

函数GenerateImage() {

私有字符串ReadJpeg(字符串ImgName) {

XmlDocument xml=新的XmlDocument()

xmlementroot=xml.CreateElement(“Color”);//根节点 AppendChild(根)

xmlcoment comment=xml.CreateComment(“图像颜色”);
AppendChild(注释);
var path=HttpContext.Current.Server.MapPath(“图像”);//获取所保存图像的服务器路径
var imgBitData=新位图(路径+“/”+ImgName);
var imgWidth=imgBitData.Width;
var imgHeight=imgBitData.Height;
SetAttribute(“RowNum”,imgHeight.ToString());
for(int i=0;i

    var imgElem = document.getElementById("uploadImg");                                                                                 // Get uploaded image name

    var tempcanvas = document.createElement("canvas");                                                                                  // Dynamic create canvas control
    tempcanvas.width = imgElem.clientWidth;
    tempcanvas.height = imgElem.clientHeight;
    var tempCtx = tempcanvas.getContext("2d");
    tempCtx.drawImage(imgElem, 0, 0);                                                                                                   // Draw image on canvas
    var dataURL = tempcanvas.toDataURL("image/png");
    var imgData = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");

    var parameter = "File64=" + imgData;                                                                                                // Set values in parameter
    var xmlhttp;        
    if (window.XMLHttpRequest) {                                                                                                        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {                                                                                                                              // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (xmlhttp) {
        xmlhttp.open("POST", "monoImageHandler.ashx", false);                                                                           // Call AJAX handler with post request                
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.send(parameter);                                                                                                        // Passes valuse as parameter 

        var imgColorXml;
        imgColorXml = xmlhttp.responseXML;                                                                                              // This is the code for getting the info of the client using text                           
        var totalRow = imgColorXml.getElementsByTagName("Color");
        var imgRowCount = parseInt(totalRow[0].getAttribute('RowNum'));
        setBackGroundUploadImage(imgElem.clientWidth, imgElem.clientHeight);                                                            // Set 

        // Draw x co-ordinate of rectangle
        for (var row = 0; row < imgRowCount; row++) {
            ctx.save();

            var y = imgColorXml.getElementsByTagName("Row_No" + row);
            var imgColCount = parseInt(y[0].getAttribute('ColNum'));

            // Draw y co-ordinate of rectangle
            for (var col = 0; col < imgColCount; col++) {

                var x = imgColorXml.getElementsByTagName("Row" + row);
                var colColor = x[col].getAttribute('Color');

                colColor = colColor.slice(2, 8);
                if (colColor != "ffffff")
                    ctx.fillStyle = "#" + colColor;
                else
                    ctx.fillStyle = "#FFFD0A";
                ctx.save();
                ctx.translate(col * WIDTH, row * HEIGHT);
                drawImageBrick();
                ctx.restore();
            }
            ctx.restore();
        }
    }
}

// Draw bricks and manage gaphs between bricks
function drawImageBrick() {
    ctx.beginPath();
    ctx.rect(1, 1, WIDTH - WMargin, HEIGHT - HMargin);
    ctx.closePath();
    ctx.fill();
}
/// This function read saved image from server

/// Convert it into bitmap data and read pixel by pixel color
    XmlComment comment = xml.CreateComment("Image Color");
    root.AppendChild(comment);

    var path = HttpContext.Current.Server.MapPath("Images");                                                                    // Get server path for pick saved image
    var imgBitData = new Bitmap(path + "/" + ImgName);

    var imgWidth = imgBitData.Width;
    var imgHeight = imgBitData.Height;

    root.SetAttribute("RowNum", imgHeight.ToString());

    for (int i = 0; i < imgHeight; i++)
    {
        XmlElement Row_No = xml.CreateElement("Row_No" + i);
        Row_No.SetAttribute("ColNum", imgWidth.ToString());
        for (int j = 0; j < imgWidth; j++)
        {
            // Read the color from pallete
            Color pixelColor = imgBitData.GetPixel(j, i);                                                                       // Get pixel by pixel color of image
            XmlElement Row = xml.CreateElement("Row" + i);
            Row.SetAttribute("Color", pixelColor.Name.ToString());
            Row_No.AppendChild(Row);            
        }
        root.AppendChild(Row_No);
    }
    imgBitData.Dispose();                                                                                                       // Free image resource
    FileInfo myfileinf = new FileInfo(path + "/" + ImgName);                                                                    // Delete image after complete process
    myfileinf.Delete();
    GC.Collect();          
    return xml.OuterXml;
}