- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 html canvas 和 javascript 创建一个应用程序。您上传并从中选择图像和颜色,但是我遇到了一个问题,我只能从上传图像的一小部分中选择颜色。我已经尝试了一些方法来修复它,但我有点难过。有人有主意吗?我用这个来帮助我:http://www.webdesignerdepot.com/2013/03/how-to-create-a-color-picker-with-html5-canvas/
<canvas width="600" height="300" id="canvas_picker"></canvas>
<div id="hex">HEX: <input type="text"></input></div>
<div id="rgb">RGB: <input type="text"></input></div>
var $files = document.getElementById('file_upload').files[0];
var reader = new FileReader();
reader.onload = imageIsLoaded;
function imageIsLoaded(e) {
// canvas
var canvas = document.getElementById('canvas_picker');
var context = canvas.getContext('2d');
var $img = $('<img>', { src: e.target.result });
// Draws Image
$img.load(function() {
context.drawImage(this,10, 10);
$("#loader").hide();
});
}
$('#canvas_picker').click(function(event){
// getting user coordinates
var x = event.pageX;
var y = event.pageY;
// getting image data and RGB values
var img_data = canvas.getImageData(x,y , 1, 1).data;
var R = img_data[0];
var G = img_data[1];
var B = img_data[2];
var rgb = R + ',' + G + ',' + B;
// convert RGB to HEX
var hex = rgbToHex(R,G,B);
// making the color the value of the input
console.log(R);
console.log(B);
console.log(G);
$('#rgb input').val(rgb);
console.log(rgb);
$('#hex input').val('#' + hex);
});
function rgbToHex(R, G, B) {
return toHex(R) + toHex(G) + toHex(B)
}
function toHex(n) {
n = parseInt(n, 10);
if (isNaN(n))
return "00";
n = Math.max(0, Math.min(n, 255));
return "0123456789ABCDEF".charAt((n - n % 16) / 16) + "0123456789ABCDEF".charAt(n % 16);
}
reader.readAsDataURL($files);
当我点击小区域外的像素时,它返回为 0。
最佳答案
修复了一些问题,例如 getImageData
尝试读取 canvas
而不是 context
,以及在 XY 10,10 而不是绘制图像0,0.
此外,您可能希望调整 Canvas 大小以适应上传的图像 W/H。
为了防止坐标计算错误(因为您获得的是相对于页面边缘的点击坐标)并获得鼠标在 Canvas 内的精确位置,您可能需要从结果坐标 x
, y
var $picked = $("#picked"); // Just to preview picked colors
var canvas = $('#canvas_picker')[0];
var context = canvas.getContext('2d');
$("#file_upload").change(function (e) {
var F = this.files[0];
var reader = new FileReader();
reader.onload = imageIsLoaded;
reader.readAsDataURL(F);
});
function imageIsLoaded(e) {
var img = new Image();
img.onload = function(){
canvas.width = this.width; // If needed? adjust canvas size
canvas.height = this.height; // respective to image size
context.drawImage(this, 0, 0); // Draw image at 0, 0, not at 10, 10
};
img.src = e.target.result;
}
$('#canvas_picker').click(function(event){
var x = event.pageX - $(this).offset().left; // Fixed coordinates
var y = event.pageY - $(this).offset().top; // respective to canvas offs.
var img_data = context.getImageData(x,y , 1, 1).data;
var R = img_data[0];
var G = img_data[1];
var B = img_data[2];
var rgb = R + ',' + G + ',' + B ;
var hex = rgbToHex(R,G,B);
$('#rgb input').val( rgb );
$('#hex input').val('#' + hex);
$picked.append("<span style='background:#"+hex+"'>#"+hex+"</span>");
});
function rgbToHex(R, G, B) {
return toHex(R) + toHex(G) + toHex(B);
}
function toHex(n) {
n = parseInt(n, 10);
if (isNaN(n)) return "00";
n = Math.max(0, Math.min(n, 255));
return "0123456789ABCDEF".charAt((n - n % 16) / 16) + "0123456789ABCDEF".charAt(n % 16);
}
*{margin:0;}
canvas{background:#ddd;}
#picked span{
display:inline-block;
width:50px;
height:50px;
margin:3px;
text-align:center;
text-shadow:1px 1px 1px #000;
font:8px/50px Arial;
color:#fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<canvas width="600" height="300" id="canvas_picker"></canvas><br>
<input type="file" id="file_upload"><br>
<div id="hex">HEX: <input type="text"></div>
<div id="rgb">RGB: <input type="text"></div>
<div id="picked"></div>
关于javascript - HTML 5 Canvas : Uploaded image colour picker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30366505/
Git-fugitive提供了一个很棒的 blame View (:Gblame),如下所示,提交 ID 显示在最左侧: ae228e74 (Dotan Cohen 2013-06-30 14:55:
Git-fugitive提供了一个很棒的 blame View (:Gblame),如下所示,提交 ID 显示在最左侧: ae228e74 (Dotan Cohen 2013-06-30 14:55:
我正在尝试定义 ggplot 中绘制的点组的颜色。我改编了这篇文章的代码: Color ggplot points based on defined color codes 但是一旦我有多个由同一分组
我是 jquery 的新手。我的代码中有这个: $("tbody tr:odd ").addClass("alt"); 使用 CSS: tbody tr.alt td { background-
我正在构建什么 大家好!我正在构建一个 Pixel Art Maker。 它基本上是一个网格,当您单击网格上的每个单元格时,它会改变颜色。 这是一个应该允许在同一 Canvas 上使用不同颜色的应用程
我正在 XCode 中使用 OpenCV 库,并开发了一个颜色跟踪应用程序,可以从一个点到另一个点绘制线条。我想知道是否可以将输出不是视频而是白色背景。所以不是 cvShowImage("video"
我有以下示例: data <- structure(list(a = c(-1.25549186262767, -0.840855480786298, - 0.635371312524283, -0.
http://www.html5rocks.com/en/tutorials/forms/html5forms/input-types.html 导航到上述网址后,您可以发现有两个名为“什么,您最喜欢
我的数据是这样的: service,rating_1,rating_2,rating_3,rating_4,rating_5 renew_patent,0,0,1,2,11 apply_benefit
如果您有一个包含灰度图像的 System.Drawing.Bitmap 实例,是否有一种内置方法可以通过另一种颜色的影响对其进行“着色”? 例如,如果您有一张咖啡杯的黑白(灰度)图片,并且您想要以编程
我刚刚开始使用 Leap Motion(它非常有趣)。 Leap 主要使用向量。现在我想创建一个程序,可以在其中可视化矢量指向的位置。我能想象做到这一点的唯一方法是使用打开此功能时出现的小图像,并使用
我很少使用标签来显示结果。 基本上,它们以下列格式显示数字 string.Format("{0:0.#}", number) 它们的 Text 属性绑定(bind)到对象。结果应加号或减号。 有没有办
我需要你的帮助在 Matlab 中绘制散点图的边界并用指定的颜色填充它。 首先让我向您展示一下散点图的样子。 scatter(x,y) 现在,让我向您展示我尝试设计的边框。 k = boundary(
我是 javascript 世界的初学者,需要一些帮助。我想要创建的是一个基于 websocket 的小型遥测应用程序。因此我安装了node.js 和包含的库。 1)我的问题是如何向客户端发送消息,改
我有一组值,例如(想象一下这些是小部件销售): year | Sarah | Elizabeth | Jones | Robert | --------------------------------
如何在运行时为给定字符串生成“随机常量颜色”? 因此,给定的字符串值将始终具有相同的颜色,但不同的字符串将具有不同的颜色。 就像 gmail 如何为发件人姓名分配颜色一样。 谢谢 评论回复: 考虑从哈
我使用 JUNG 库通过图形可视化了一个由服务器和链接组成的网络。 所以我像这样初始化我的图表,Server 和 Link 是我项目中的类: Graph g; g =
我现在正在 Xcode 5 中创建一个单一 View 应用程序,但我陷入了困境。有谁知道如何使按钮根据用户的操作改变颜色。例如我有一个按钮,根据用户滑动的方式我想更改按钮的颜色。因此,如果按钮显示向左
我在我的 li 元素中有一个链接和一些包含在跨度中的文本。 当我将鼠标悬停在 li 上时,我想更改文本和链接的颜色,这很有效,但是我很难设置访问颜色并保持此功能。 这是我的代码- HTML -
我想获取图像所有单个像素的颜色。详细说明假设我有一张名为“SampleImage”的图像,像素为 400 x 400基本上,我想从“SampleImage”创建一个网格,其中包含 400 x 400
我是一名优秀的程序员,十分优秀!