日曜日, 8月 03, 2025

Excel VBA 49 
ExccelでA2とA2セルの色を指定段階の色相グラデに

ExccelでA2とA2セルの色から指定した段階の色相グラデ—ションを作成します。

Sub ApplyHueGradientToColumnB()
Dim ws As Worksheet
Dim startColor As Long, endColor As Long
Dim steps As Integer, i As Integer
Dim startHue As Single, endHue As Single
Dim startSaturation As Single, startBrightness As Single
Dim endSaturation As Single, endBrightness As Single
Dim h As Single, s As Single, b As Single
Set ws = ActiveSheet
startColor = ws.Range("A1").Interior.Color
endColor = ws.Range("A2").Interior.Color
steps = Application._
        InputBox("ステップ数を入力してください:", Type:=1)
' RGBからHSBに変換
RGBtoHSB startColor, startHue, startSaturation, startBrightness
RGBtoHSB endColor, endHue, endSaturation, endBrightness

' グラデーションを適用
For i = 0 To steps
h = startHue + (endHue - startHue) * i / steps
s = startSaturation + _
            (endSaturation - startSaturation) * i / steps
b = startBrightness + _
            (endBrightness - startBrightness) * i / steps
ws.Cells(i + 3, 2).Interior.Color = HSBtoRGB(h, s, b) ' B列に適用
Next i
End Sub

' RGB を HSB に変換
Sub RGBtoHSB(ByVal rgbColor As Long, _
    ByRef h As Single, ByRef s As Single, ByRef b As Single)
Dim r As Single, g As Single, bl As Single
Dim minVal As Single, maxVal As Single, delta As Single

r = (rgbColor Mod 256) / 255
g = ((rgbColor ¥ 256) Mod 256) / 255
bl = (rgbColor ¥ 65536) / 255
minVal = WorksheetFunction.Min(r, g, bl)
maxVal = WorksheetFunction.Max(r, g, bl)
delta = maxVal - minVal

b = maxVal ' 明度

If delta = 0 Then
h = 0
s = 0
Else
s = delta / maxVal ' 彩度

If maxVal = r Then
h = (g - bl) / delta
ElseIf maxVal = g Then
h = 2 + (bl - r) / delta
Else
h = 4 + (r - g) / delta
End If

h = h * 60
If h < 0 Then h = h + 360
End If
End Sub

' HSB を RGB に変換
Function HSBtoRGB(ByVal h As Single, _
    ByVal s As Single, ByVal b As Single) As Long
Dim r As Single, g As Single, bl As Single
Dim i As Integer, f As Single, p As Single, q As Single, t As Single

If s = 0 Then
r = b: g = b: bl = b
Else
h = h / 60
i = Int(h)
f = h - i
p = b * (1 - s)
q = b * (1 - s * f)
t = b * (1 - s * (1 - f))

Select Case i Mod 6
Case 0: r = b: g = t: bl = p
Case 1: r = q: g = b: bl = p
Case 2: r = p: g = b: bl = t
Case 3: r = p: g = q: bl = b
Case 4: r = t: g = p: bl = b
Case 5: r = b: g = p: bl = q
End Select
End If

HSBtoRGB = RGB(Int(r * 255), Int(g * 255), Int(bl * 255))
End Function

A1とA2セルに基準となる塗りを行い、VBAを実行すると段階数を入力するパレットが表示されるので任意入力すれば・・・

指定段階段階の基準の色の間となる段階の塗りをB列に表示します。

TCDW8482 
相手するスタッフには同情してしまう今日この頃

Baby Alien 111
白菜系(^o^)
美容院で、機関銃のように家族の内輪話を展開するお客さん。ワケワカメですが、それを相手するスタッフには同情してしまう今日この頃。ちなみに私は、色々なトラウマから高校以降は理髪店を利用していません。

土曜日, 8月 02, 2025

JavaScriptでAI遊び 57 
Illustratorで最小円の直径間隔で蛇の目を作る(改良版)

Illustratorで最小円の直径の間隔で蛇の目を作る。正円だけでなく楕円にも対応版。

数を指定しても煩雑になるので、ここでは元の円を含めて4つの円で作成する蛇の目マークを任意の楕円を選択して自動生成します。その際、最小円がそれぞれの楕円の垂直方向の間隔を同じとします。

結果、選択した楕円の垂直方向の直径Aに対して
2つ目の円の直径は(A÷7×5)、
3つ目の円の直径は(A÷7×3)、
一番小さい円の直径は(A÷7×1)
となります。

(function () {
var doc = app.activeDocument;
var sel = doc.selection;
if (sel.length !== 1 || sel[0].typename !==
        "PathItem" || !sel[0].closed) {
alert("1つの楕円を選択してください。");
return;
}
var baseEllipse = sel[0];
var baseWidth = baseEllipse.width;
var baseHeight = baseEllipse.height;
var centerX = baseEllipse.position[0] + baseWidth / 2;
var centerY = baseEllipse.position[1] - baseHeight / 2;
var sizes = [5/7, 3/7, 1/7];
for (var i = 0; i < sizes.length; i++) {
var newWidth = baseWidth * sizes[i];
var newHeight = baseHeight * sizes[i];
var newEllipse = doc.pathItems.ellipse(
centerY + newHeight / 2,
centerX - newWidth / 2,
newWidth,
newHeight
);
newEllipse.stroked = true;
newEllipse.filled = false;
}
})();

実行結果です。正円にも対応します。

TCDW8481 
猛暑で外に出たくなくなる症候群

Baby Alien 110
着地が綺麗に決まりました〜(^o^)
久しぶりにドトールコーヒーにて、シャインマスカット・ヨーグルトとシナモンロールで打ち合わせ。打ち合わせが終わっても、猛暑で外に出たくなくなる症候群。

金曜日, 8月 01, 2025

手作りレンズプロジェクト 04 
100均の虫眼鏡1枚レンズ vol.2

100均でゲットした4倍の虫眼鏡を分解せずにレンズとする実験の続編です。色画用紙で作成するのはレンズと絞り部分に抑え、それ以外は手持ちの延長ユニットやフォーカシングアダプタを組み合わせてみました。

手作りレンズプロジェクト

こんな感じです。コレでデリケートなピント合わせが可能になりました。

でも、相変わらずピント合わせは難しかったです。一応カメラレンズにピントを合わせましたが、こんなもんかな?

SONY α NEX-6
KAZNEX 38mm F19

TCDW8480 
多分仕事できない人なんだと確信しています

Baby Alien 109
耳が尖っちゃった〜(^o^)
地下鉄の中で大声で仕事の成功例を自慢し合っているリーマン2名。とにかくうるさくて辟易。痛いというか、多分仕事できない人なんだと確信しています。

木曜日, 7月 31, 2025

Let's start JavaScript 78 
解像度変更時のフォントサイズ確認

画像解像度を変更した時のフォントサイズ確認計算式を作成しました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
<title>フォントサイズ計算</title>
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 10px;
background-color: black;
color: white;
}
</style>
</head>
<body>
<h3>解像度変更時のフォントサイズを計算</h3>
<label>元のフォントサイズ(px):
<input type="number" id="originalSize" value="12">
</label><br>
<label>&emsp;&nbsp;元の画像解像度(DPI):
<input type="number" id="originalDpi" value="72">
</label><br>
<label>&emsp;&emsp;&nbsp;新しい解像度(DPI):
<input type="number" id="newDpi" value="350"></label>
<br><br>
<button onclick="calculateFontSize()">計算</button>
<h3 style="color: yellow">新しいフォントサイズ:
<span id="newFontSize">-</span> px</h3>

<script>
function calculateFontSize() {
let originalSize = parseFloat(document.
                getElementById("originalSize").value);
let originalDpi = parseFloat(document.
                getElementById("originalDpi").value);
let newDpi = parseFloat(document.
                getElementById("newDpi").value);

if (originalDpi > 0 && newDpi > 0) {
let newSize = originalSize / (newDpi / originalDpi);
document.getElementById("newFontSize").innerText =
newSize.toFixed(2);
} else {
alert("解像度は正の値を入力してください。");
}
}
</script>
</body>
</html>

実行直後の画面。必要な値を入力して[計算]をクリックッすれば・・・

新しい解像度を表示します。

TCDW8479 
そういった人ほど世渡りが上手いんですよね

Baby Alien 108
答えが出ている変わり玉(^o^)
誰でも自分にとって相性の悪い人っていますね。私は、相手によって態度を変えたり、見ていないところでサボる人が不快です。でも、そういった人ほど世渡りが上手いんですよね。

水曜日, 7月 30, 2025

APS-CモードをテレコンバーターでFULLサイズに

APS-CモードをテレコンバーターでFULLサイズに・・・という発想はベタだけれども現実的です。

SONY α7 II ILCE-7M2
Ai NIKKOR 55mm F1.2
FULLサイズの3:2(6000×4000px)となります(※)。

※3:2の(6000×4000px)で撮影したものを4:3(5333×4000)にトリミング。

そのままAPS-Cクロップにすると55mmは1.5倍の82.5mmに拡大されますが、画像サイズは3:2で3936×2624pxとなります(※)。

※3:2の(3936×2624px)で撮影したものを4:3(3499×2624)にトリミング。

そこでFULLモードのままテレコンバーター(※)を使うとAPS-Cクロップの望遠イメージのままFULLサイズの画像サイズを確保できます。

※Nikon AF Teleconverter TC-16A(1.6倍)のため、55mmに装着すると、88mmとなります。

APS-CクロップのままTC-16Aを装着すると132mmとなりますが、画像サイズは3:2で3936×2624pxとなります(※)。

※3:2の(3936×2624px)で撮影したものを4:3(3499×2624)にトリミング。

しかし、TC-16Aを装着したままFULLモードに戻すと88mmで画像サイズは(6000×4000px)となります(※)。

※3:2の(6000×4000px)で撮影したものを4:3(5333×4000)にトリミング。

TCDW8478 
基本ボケナスの私はそう感じています

Baby Alien 107
性格の悪いナス系(^o^)
茄子は炒めても、焼いても、味噌汁でも・・・とにかく万能ですね。と、基本ボケナスの私はそう感じています(^o^)。