<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 無課金</title>
    <description>The latest articles on DEV Community by 無課金 (@_7702e11f8d300d568586f).</description>
    <link>https://dev.to/_7702e11f8d300d568586f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3550267%2F25335d85-3e15-4db2-a7de-1a2c057a9af2.jpg</url>
      <title>DEV Community: 無課金</title>
      <link>https://dev.to/_7702e11f8d300d568586f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_7702e11f8d300d568586f"/>
    <language>en</language>
    <item>
      <title>Untitled</title>
      <dc:creator>無課金</dc:creator>
      <pubDate>Tue, 07 Oct 2025 04:07:45 +0000</pubDate>
      <link>https://dev.to/_7702e11f8d300d568586f/untitled-2lje</link>
      <guid>https://dev.to/_7702e11f8d300d568586f/untitled-2lje</guid>
      <description>&lt;p&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;br&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;br&gt;
    &lt;br&gt;
    ホワイトバランスシミュレーター&lt;br&gt;
    &amp;lt;br&amp;gt;
        body {&amp;lt;br&amp;gt;
            font-family: sans-serif;&amp;lt;br&amp;gt;
            text-align: center;&amp;lt;br&amp;gt;
            padding: 20px;&amp;lt;br&amp;gt;
            background-color: #f0f0f0; /* 背景色を薄いグレーに &amp;lt;em&amp;gt;/&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        .controls {&amp;lt;br&amp;gt;
            margin-bottom: 25px;&amp;lt;br&amp;gt;
            padding: 10px;&amp;lt;br&amp;gt;
            background: #fff;&amp;lt;br&amp;gt;
            border-radius: 8px;&amp;lt;br&amp;gt;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);&amp;lt;br&amp;gt;
            display: inline-block;&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        label {&amp;lt;br&amp;gt;
            display: block;&amp;lt;br&amp;gt;
            margin-bottom: 8px;&amp;lt;br&amp;gt;
            font-weight: bold;&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        input[type=&amp;amp;quot;range&amp;amp;quot;] {&amp;lt;br&amp;gt;
            width: 300px;&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        /&amp;lt;/em&amp;gt; 3. 白を表示する大きな枠 &amp;lt;em&amp;gt;/&amp;lt;br&amp;gt;
        #white-box {&amp;lt;br&amp;gt;
            width: 90%;&amp;lt;br&amp;gt;
            max-width: 700px;&amp;lt;br&amp;gt;
            height: 400px;&amp;lt;br&amp;gt;
            margin: 30px auto;&amp;lt;br&amp;gt;
            border: 2px solid #333; /&amp;lt;/em&amp;gt; 枠線で区切りを分かりやすく &amp;lt;em&amp;gt;/&amp;lt;br&amp;gt;
            box-shadow: 0 0 15px rgba(0,0,0,0.2);&amp;lt;br&amp;gt;
            transition: background-color 0.2s; /&amp;lt;/em&amp;gt; 変化を滑らかに */&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
        .value-display {&amp;lt;br&amp;gt;
            font-size: 0.9em;&amp;lt;br&amp;gt;
            color: #555;&amp;lt;br&amp;gt;
            margin-top: 5px;&amp;lt;br&amp;gt;
        }&amp;lt;br&amp;gt;
    &lt;br&gt;
&lt;br&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1&amp;gt;ホワイトバランス＆色被り シミュレーター&amp;lt;/h1&amp;gt;

&amp;lt;div class="controls"&amp;gt;
    &amp;lt;label for="temp-slider"&amp;gt;色温度 (Kelvin)&amp;lt;/label&amp;gt;
    &amp;lt;input type="range" id="temp-slider" min="2000" max="10000" value="6500"&amp;gt;
    &amp;lt;div class="value-display" id="temp-value"&amp;gt;6500 K&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class="controls"&amp;gt;
    &amp;lt;label for="tint-slider"&amp;gt;色被り (Tint: Green ←→ Magenta)&amp;lt;/label&amp;gt;
    &amp;lt;input type="range" id="tint-slider" min="-100" max="100" value="0"&amp;gt;
    &amp;lt;div class="value-display" id="tint-value"&amp;gt;0&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id="white-box"&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;script&amp;gt;
    // ----------------------------------------------------
    // 色温度からRGB値を計算する関数（専門的なアルゴリズム）
    // ----------------------------------------------------
    function kelvinToRgb(kelvin) {
        let temp = kelvin / 100;
        let R, G, B;

        if (temp &amp;lt;= 66) {
            R = 255;
            G = 99.4708025861 * Math.log(temp) - 161.1195681661;
            B = temp &amp;lt;= 19 ? 0 : 138.5177312231 * Math.log(temp - 10) - 305.0447927307;
        } else {
            R = 329.698727446 * Math.pow(temp - 60, -0.1332047592);
            G = 288.1221695283 * Math.pow(temp - 60, -0.0755148492);
            B = 255;
        }
        return {
            r: Math.min(255, Math.max(0, Math.round(R))),
            g: Math.min(255, Math.max(0, Math.round(G))),
            b: Math.min(255, Math.max(0, Math.round(B)))
        };
    }

    // ----------------------------------------------------
    // 色被り補正を適用する関数
    // ----------------------------------------------------
    function applyTint(rgb, tintValue) {
        // tintValueは -100 (Green) から 100 (Magenta)
        const factor = tintValue / 100;

        // マゼンタ方向 (RとBを増やす, Gを減らす)
        if (factor &amp;gt; 0) {
            rgb.r = Math.min(255, rgb.r + (255 - rgb.r) * factor * 0.5);
            rgb.b = Math.min(255, rgb.b + (255 - rgb.b) * factor * 0.5);
            rgb.g = Math.max(0, rgb.g - rgb.g * factor * 0.3);
        } 
        // グリーン方向 (Gを増やす, RとBを減らす)
        else if (factor &amp;lt; 0) {
            const absFactor = Math.abs(factor);
            rgb.g = Math.min(255, rgb.g + (255 - rgb.g) * absFactor * 0.5);
            rgb.r = Math.max(0, rgb.r - rgb.r * absFactor * 0.3);
            rgb.b = Math.max(0, rgb.b - rgb.b * absFactor * 0.3);
        }

        return {
            r: Math.round(rgb.r),
            g: Math.round(rgb.g),
            b: Math.round(rgb.b)
        };
    }


    // ----------------------------------------------------
    // メインの更新処理
    // ----------------------------------------------------
    const tempSlider = document.getElementById('temp-slider');
    const tintSlider = document.getElementById('tint-slider');
    const whiteBox = document.getElementById('white-box');
    const tempValueDisplay = document.getElementById('temp-value');
    const tintValueDisplay = document.getElementById('tint-value');


    function updateColor() {
        // 1. スライダーから値を取得
        const kelvin = parseInt(tempSlider.value);
        const tint = parseInt(tintSlider.value);

        // 2. 色温度で基本色を計算
        let finalRgb = kelvinToRgb(kelvin);

        // 3. 色被り補正を適用
        finalRgb = applyTint(finalRgb, tint);

        // 4. 枠に色を適用
        whiteBox.style.backgroundColor = `rgb(${finalRgb.r}, ${finalRgb.g}, ${finalRgb.b})`;

        // 5. 表示を更新
        tempValueDisplay.textContent = `${kelvin} K`;
        tintValueDisplay.textContent = `${tint}`;
    }

    // スライダーが動いたときに色を更新
    tempSlider.addEventListener('input', updateColor);
    tintSlider.addEventListener('input', updateColor);

    // ページ読み込み時に一度実行して初期表示
    updateColor();
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


</description>
      <category>codepen</category>
    </item>
  </channel>
</rss>
