广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4873 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
rei 手机
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小人物
级别: 小人物 该用户目前不上站
推文 x2 鲜花 x366
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][精华] ScanLine 的问题
这是低通滤波的程式码...->开图->转灰阶->低通一次!

转灰阶ok! 但低通时就发生错误↓

一直出现scan line index out of range...

不知是否可指导一下哪儿有错= ="
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
const int RED = 2;
const int GREEN = 1;
const int BLUE = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Edit1Change(TObject *Sender)
{
;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute())
{
..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容




人生要是跟等巴士一样...
  你愿意搭哪一种车?
爆满?脏车?旧车?新车?空车?还是...走路?
献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2006-05-03 14:31 |
cmovies
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x20
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

ptr2 = (Byte*) Image2->Picture->Bitmap->ScanLine[row];
-> Image2 从哪里来?
在 Button4Click 中 Image1 的 PixelFormat 没有设定, 但程式内好像当成 pf8bit 来用?


献花 x1 回到顶端 [1 楼] From:台湾中华电信 | Posted:2006-05-03 16:46 |
rei 手机
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小人物
级别: 小人物 该用户目前不上站
推文 x2 鲜花 x366
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用cmovies于2006-05-3 16:46发表的 :
ptr2 = (Byte*) Image2->Picture->Bitmap->ScanLine[row];
-> Image2 从哪里来?
在 Button4Click 中 Image1 的 PixelFormat 没有设定, 但程式内好像当成 pf8bit 来用?

呵~今天下午在学校时~

也刚好在重新整理时有发现...

可是却也出了令一个问题= =

其他的都跟前者一样~@@

低通时~却无法完整扫完= =

不知道是不是他扫图时...

连rgb值也考虑近去了???

所以无法正常???还是...

目前写的程式

复制程式
void __fastcall TForm1::Button4Click(TObject *Sender)
{
  int low,up,down,left,right,col,row;
  Byte *ptr2, *tptr, *uptr, *dptr;

if(Image2->Picture->Bitmap->Empty)
  Image2->Picture->Bitmap=Image1->Picture->Bitmap;

  for (row=0; row<Image2->Picture->Height; row++)
       {
         up     =row-1;
                if(up<0)
                   up=Image2->Picture->Height -1;     //发现小于min(Height),则取max(Height)来使用
         down   =row+1;
                if(down==Image2->Picture->Height)
                   down=0;                           //发现大于max(Height),则取min(Height)来使用

         uptr = (Byte*) Image2->Picture->Bitmap->ScanLine[up];
         tptr = (Byte*) Image2->Picture->Bitmap->ScanLine[row];
         dptr = (Byte*) Image2->Picture->Bitmap->ScanLine[down];

         for (col=0; col<Image2->Picture->Width; col++)
             {
                left    =col-1;
                    if(left<0)
                        left=Image2->Picture->Width -1;//发现小于min(width),则取max(width)来使用
                right   =col+1;
                    if(right==Image2->Picture->Width)
                        right=0;                      //发现大于max(width),则取min(width)来使用

                low = (int)(uptr[left] +uptr[col] +uptr[right]+
                            tptr[left] +tptr[col] +tptr[right]+
                            dptr[left] +dptr[col] +dptr[right] );

                low=low/9;
                tptr[col]= (Byte)(low);
              }
       }
       //ShowMessage(col);
       Repaint();
}


人生要是跟等巴士一样...
  你愿意搭哪一种车?
爆满?脏车?旧车?新车?空车?还是...走路?
献花 x0 回到顶端 [2 楼] From:台湾中华电信 | Posted:2006-05-04 00:33 |
cmovies
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x20
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

Image2 的 PixelFormat 为 Image1 的 PixelFormat, 所以应该是 pf24bit
那么每个点应该有 R G B 三个 Bytes
照你的程式来看只有处理三分之一的图而已

          low = (int)(uptr[left*3+BLUE] +uptr[col*3+BLUE] +uptr[right*3+BLUE]+
                  tptr[left*3+BLUE] +tptr[col*3+BLUE] +tptr[right*3+BLUE]+
                  dptr[left*3+BLUE] +dptr[col*3+BLUE] +dptr[right*3+BLUE] );

          low=low/9;
          tptr[col*3+BLUE]= (Byte)(low);

其他两个颜色看你要不要加上去啰!

此文章被评分,最近评分记录
财富:40 (by codeboy) | 理由: 感谢您的详细回答喔^^


献花 x1 回到顶端 [3 楼] From:台湾中华电信 | Posted:2006-05-04 01:16 |
rei 手机
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
小人物
级别: 小人物 该用户目前不上站
推文 x2 鲜花 x366
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

下面是引用cmovies于2006-05-4 01:16发表的 :
Image2 的 PixelFormat 为 Image1 的 PixelFormat, 所以应该是 pf24bit
那么每个点应该有 R G B 三个 Bytes
照你的程式来看只有处理三分之一的图而已

          low = (int)(uptr[left*3+BLUE] +uptr[col*3+BLUE] +uptr[right*3+BLUE]+
.......
原来~

晚点去学校再试试能不能宣告它为"8Bit..."

刚看了范例书...

怎..怎么"高通"跟"边缘"也差不多呀= =

汗....>"<


人生要是跟等巴士一样...
  你愿意搭哪一种车?
爆满?脏车?旧车?新车?空车?还是...走路?
献花 x0 回到顶端 [4 楼] From:台湾中华电信 | Posted:2006-05-04 07:36 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.031830 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言