2005年12月28日

JTrim v1.52公開

JTrim v1.52を公開しました。
http://www.woodybells.com/jtrim.html

# 透過色を画面上で表現するようにした(イメージメニューの「透過状態を表示」 をオフにすることにより従来通りの表示になります)。
# Exifデータを保持してJPEG保存する場合にメッセージを表示するようにした。 (保存オプションにてOn/Off切り替え可能)

投稿者 woodybells : 23:33 | コメント (3) | トラックバック

2005年11月09日

JTrim v1.51 公開

JTrim v1.51を公開しました。

http://www.woodybells.com/jtrim.html

# 元データにより、Exifデータが保存できなくなる場合がある不具合を修正。
# リサイズで比率の履歴を呼び出しても正常に動作しなかった不具合を修正。
# 余白作成で四辺同じ値で作成できるようにした。
# 関連付けにJPEG2000形式を追加。

投稿者 woodybells : 23:27 | コメント (1) | トラックバック

2005年10月23日

JTrim v1.50a 公開

毎度のことですが、無視できないバグがありましたm(__)m
v1.50をダウンロードした方には大変申し訳ありません。

http://www.woodybells.com/jtrim.html

投稿者 woodybells : 11:02 | コメント (0) | トラックバック

JTrim v1.50 を公開しました

http://www.woodybells.com/jtrim.html

最近月1回の更新(それも小さめな)がやっとですね。。
時間が無いとか体力がないとか色々言い訳はあるのですが、とりあえず今月を無更新で終了することだけは避けられてホッとしました。

投稿者 woodybells : 01:24 | コメント (2) | トラックバック

2005年09月21日

JTrim v1.49 & CheckAds v0.91 公開

詳しくは各ソフトのページでご確認ください。

JTrim v1.49
CheckAds v0.91

投稿者 woodybells : 23:07 | コメント (0) | トラックバック

2005年07月18日

JTrim v1.47a 公開

気がつけば1週間も書き込んでなかったですね。
このブログでソフトの更新チェックをしている人がいるのかどうか解りませんが、
とりあえず告知しておきましょう。

http://www.woodybells.com/jtrim.html

# 「角丸切り抜き」「円形切り抜き」の枠線と影を付加するロジックを若干見直
した。
# 「一括変換」で「Exifデータを保持する」の設定を反映させるようにした。
# 「JPEG品質」の設定画面に「プレビュー」ボタンをつけた。


「○○切り抜き」の影との境界は前バージョンと比べて綺麗になったと思うのですが、
評判が気になるところです。今回はv1.47->v1.47aと控えめなバージョンアップ
としましたが、影では結構な労力をつかってしまいました。。他にもいくつかの修正
を手がけていたのですが、うまくいかず先送りとなりました。残念。

投稿者 woodybells : 16:01 | コメント (2) | トラックバック

2005年07月01日

データベースプログラム

作成中....といっても仕事用ですのでお披露目する日は来ませんが。
ORACLEなのでoo4o使ってます。便利ですね。

投稿者 woodybells : 01:08 | コメント (0) | トラックバック

2005年06月11日

WinShotのメモリリーク

今回、WinShotのメモリリークを修正したのですが、原因はアイコンを動的に作
成する際に使用していた「CreateIconFromResource」APIでした。どうも上記API
で作成したアイコンは「DestoroyIcon」APIで解放されないみたいなんです。解
放する手段が無いというのもおかしいので、別の方法で解放する必要があるのか
もしれませんが見つけられませんでした。

結果として「CreateIconFromResourceEx」APIを使用することによりメモリリー
クは解決したのですが、MSDNを見ていてもその様な記述は見つからず不思議な気
持ちです。

詳細をご存じの方、教えてくださいm(__)m

投稿者 woodybells : 18:36 | コメント (4) | トラックバック

2005年06月01日

Excelで開かれているファイルは開けない?

ちょっと前にDelphi-MLで「Excelで開かれているファイルをAssignFileでopen出
来ない」という話題が流れて、「TFileStreamを使おう」みたいな結果になって
たのですが、直接 CreateFile APIを呼び出せば問題なくopenできました
(考えてみれば当たり前ですね)。

自分自身の健忘録をかねて記載しておきます。

ファイルハンドル := CreateFile(ファイル名, GENERIC_READ, 
                               FILE_SHARE_READ + FILE_SHARE_WRITE, 
                               nil, OPEN_EXISTING, 
                               FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_COMPRESSED +
                               FILE_ATTRIBUTE_HIDDEN  + FILE_ATTRIBUTE_READONLY   +
                               FILE_ATTRIBUTE_SYSTEM  + FILE_ATTRIBUTE_TEMPORARY, 0);

投稿者 woodybells : 00:55 | コメント (0) | トラックバック

2005年05月21日

JTrim v1.46a 公開

ようやく公開できました。UNICODE対応が中途半端ですが、長引きそうなのでしばらく
はこれで我慢していただければと思います。

投稿者 woodybells : 21:32 | コメント (1) | トラックバック

2005年05月17日

tail

なんだか、ここ数日間でちょこちょこいじってたプログラム(TAIL)を公開してみ
ました。tailってコマンドはWindowsには基本的に存在しないので聞いたことが
無い方も多いと思います。

たとえば、数百MBにもなるログファイルの「最後の数行を見たい」なんて時、
Windowsでしたらどうしますか?テキストエディタなどで開いて最後までカーソ
ルを移動してなんて面倒であると共に殆ど不要なデータまで読み込まなければな
らないので時間もメモリももったいないです。

そんな時に使うのがtailです。UNIX系のOSでは有名なコマンドです。

tail ファイル名

とやるだけで、ファイルの最後の数行が表示されます。必要な部分しか読み込ま
ないのでメモリも消費しないですし、なにより速いです。とても便利です。

tail -f ファイル名

とすればファイルを監視してデータが追加されたらその分のデータを出力してく
れます。すごい。

今回公開したのはそんなことが出来るWindows版プログラムです。

もっとも、ここら辺
のものをインストールするとtailもついてくるらしいんですが、仰々しすぎ
ますし、Win9xでは動きません。

てなわけで、作ったのがTAILです。大した機能はないですが、よろしかったらお
手元に置いておいてください。

いざというときに役に立つかもしれません。

あと、Delphiソースコードもダウンロード可能ですがいつもにも増して「イケて
ない」ソースとなっております。重々承知しておりますので笑い捨ててください。

投稿者 woodybells : 22:50 | コメント (2) | トラックバック

2005年05月14日

2GB以上のファイルサイズを取得する

function GetFileSize2(const fname: string): Int64;
var
  aHwnd: THandle;
  fd: TWin32FindData;
begin
  Result := -1;
  aHwnd := FindFirstFile(PChar(FileName), FindData);
  if aHwnd <> INVALID_HANDLE_VALUE then 
  begin
    Windows.FindClose(aHwnd);
    if (fd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      Int64Rec(Result).Lo := fd.nFileSizeLow;
      Int64Rec(Result).Hi := fd.nFileSizeHigh;
    end;
  end;
end;

投稿者 woodybells : 23:47 | コメント (0) | トラックバック

2005年05月13日

画像に使用されている色数をカウントする方法

すでにネタ不足気味だったりします。^^;;

以下の関数を使用すると画像(Bitmap)の色数をカウントすることが出来ます。
私はこの機能をJTrimに実装するときに初めてTBitsの存在を知りました。
知らない方も多いのではないでしょうか?

フルカラー画像の場合、最大1677万色使用されるので、TBitsを使用しないとメモリも大変なことになってしまいます。
覚えておくと何かと便利です。

基本的にこの投稿が読まれているかどうかも解らないので、自分の経験から勝手に書いていますが、
ご希望のネタがあったら教えてください。掲載できるものは載せたいと思います。

#長くなりすぎるものや、著作権が私にないコードなどは無理ですが。。。

function GetColorCount(Bmp: TBitmap): Longint;
var
  ColorBits: TBits;
  tmpBmp: TBitmap;
  pBuff: Pointer;
  x, y, cl: Longint;
begin
  Result := 0;
  ColorBits := TBits.Create;
  try
    // TBitsのサイズをフルカラーの最大値(1677万色)に設定する。
    ColorBits.Size := 16777216;
    tmpBmp := TBitmap.Create;
    try
      tmpBmp.Assign(Bmp);
      // メモリアクセスしやすいよう、32bitカラーに変換
      tmpBmp.PixelFormat := pf32bit;
      for y := 0 to tmpBmp.Height - 1 do
      begin
        // 行のポインタを取得(ScanLine)
        pBuff := tmpBmp.ScanLine[y];
        for x := 0 to tmpBmp.Width - 1 do
        begin
          // 4バイト単位で読み込む。
          // 詳細は省略するが,$00BBGGRRの形式となるので、
          // そのままTBitsのIndexとして使用する
          cl := PDWord(pBuff)^;
          if not ColorBits[cl] then
          begin
            // 初めての色の場合は、カウンタのインクリメント
            Inc(Result);
            ColorBits[cl] := True;
          end;
          // ポインタ移動
          Inc(PDWord(pBuff));
        end;
      end;
    finally
      tmpBmp.Free;
    end;
  finally
    ColorBits.Free;
  end;
end;

投稿者 woodybells : 00:29 | コメント (2) | トラックバック

2005年05月10日

イコライズのソースコード

突然ですが、ビットマップのイコライズ(ヒストグラム均等化)のソースです。


uses Math;

type 

  PRGBTripleArray = ^TRGBTripleArray;
  TRGBTripleArray = array [Byte] of TRGBTriple;

 ・
 ・
 ・

procedure Equalise(bmp: TBitmap);

  // 単純なグレースケール値取得
  function GetGrayscaleLevel(Value: TRGBTriple): Byte;
  begin
    Result := (Value.rgbtRed + Value.rgbtGreen + Value.rgbtBlue) div 3;
  end;

var
  Histgram, Map: array[0..255] of Cardinal;
  EqualizedMap:  array[0..255] of Byte;
  pLine: PRGBTripleArray;
  x, y, i, j: Integer;
  Low, High: Cardinal;
begin

  // Bitmapを24ビットカラーにする
  Bmp.PixelFormat := pf24bit;

  // ヒストグラムを初期化する
  ZeroMemory(@Histgram, SizeOf(Histgram));
  ZeroMemory(@Map, SizeOf(Map));
  ZeroMemory(@EqualizedMap, SizeOf(EqualizedMap));

  // ヒストグラム作成
  for y := 0 to bmp.Height - 1 do
  begin
    pLine := bmp.ScanLine[y];
    for x := 0 to bmp.Width - 1 do
      Inc(Histgram[GetGrayscaleLevel(pLine^[x])]);
  end;

  // ヒストグラム統合
  j := 0;
  for i := 0 to 255 do
  begin
    Inc(j, Histgram[i]);
    Map[i] := j;
  end;
  Low  := Map[0];
  High := Map[255];

  // 均等化マップ作成
  for i := 0 to 255 do
    EqualizedMap[i] := ((Map[i] - Low) * 255) div Max(High - Low, 1);

  // ピクセル情報置換
  for y := 0 to bmp.Height - 1 do
  begin
    pLine := bmp.ScanLine[y];
    for x := 0 to bmp.Width - 1 do
    begin
      pLine^[x].rgbtBlue := EqualizedMap[pLine^[x].rgbtBlue];
      pLine^[x].rgbtGreen := EqualizedMap[pLine^[x].rgbtGreen];
      pLine^[x].rgbtRed := EqualizedMap[pLine^[x].rgbtRed];
    end;
  end;
end;

投稿者 woodybells : 00:31 | コメント (0) | トラックバック

2005年05月09日

Unicode対応が...

いろいろと問題が出てきた....。煮詰まってきたので別なことからやります^^;

投稿者 woodybells : 23:42 | コメント (0) | トラックバック

2005年05月08日

JTrim Unicodeでの文字入れ

今日は、掲示板で要望のあった文字入れのUnicode対応について調査してみた。

ちょっと考えただけでも、対応が必要と思われる部分は以下の通り。

・インターフェース(TMemo)のUnicode対応
・プログラミング中で行っているExtTextOut API を ExtTextOutW APIへ変更
・上記2点間で文字列の受け渡しするクラスのUnicode対応(TStringsのUnicode対応版)
・Iniファイルへ書き込み・読み戻し部分のUnicode対応


やはり、見た目の効果と比べて苦労が大きい改修のようだ。しかも、Win9xとNT系OSによって処理を変えないといけない部分もでてくると思われる。

ちょっとググってみると、TntWare Delphi Unicode Controlsというフリーのコンポーネントが結構使われているらしい。あまりこの手のコンポーネントは使いたくはないが自力でUnicodeに全対応させるのもつらい。とりあえずダウンロードして使ってみることにする。

少し試してみたところ、かなりいけてるライブラリであった。細かいことは機会があったら述べさせてもらうこととするが、Unicodeを扱うクラスや関数もしっかりとしたものが多数用意されている。

これならJTrimに実装するのも結構簡単にいけるかもしれない。と、軽く実装してみた。まだ、途上中の画面だがうまいこと言った。何とすばらしいコンポーネントなんだろう(^-^)

jtrim_uni.gif


公開までには、後いくつかの問題があるが、まぁ来週末までには何とかなるだろう。

投稿者 woodybells : 22:44 | コメント (2) | トラックバック